C語言p和p的區別c語言的指標部分p與p的區別是什麼?

2021-03-04 06:33:43 字數 5887 閱讀 8444

1樓:楓璽

c語言中,*p 和p都常用在指標當中表示一個指標變數,*p 和p的區別:

1、表示的含義不同

*p表示此指標指向的記憶體地址中存放的內容。

p表示一個指標變數的名字,指此指標變數所指向的記憶體地址。

2、輸出的格式不同

*p一般是一個和指標型別一致的變數或者常量。

p輸出的是一個16進位制數, 輸出一個指標的地址。

3、功能不同

*p是讓程式去那個地址取出資料。

p存放的是地址。

例子:1、int a[5]=;

int *p=a;//這是在定義指標變數p的同時就直接給它初始化,即把陣列a的首地址賦給它。

2、int a[5]=;

int *p;//宣告指標變數p

p = a;

擴充套件資料

(*p)操作是這樣一種運算,返回p 的值作為地址的那個空間的取值。(&p)則是這樣一種運算,返回當時宣告p 時開闢的地址。可以用賦值語句對記憶體地址賦值。

例:int *p;

p=2003h;

*p=3000h

結果:**p=*(*(p))=*(*(2003h))=*(3000h)=3000h。

&&p=&(&(p))=&(3001h),此時出錯了,3001h 是個常數無法存放地址。

*&p=*(&(p))=*(3001h)=2003h,也就是*&p=p。

2樓:ieio啊

兩者之間的區別如下:

1、表示的意義不同。

p是一個指標變數的名字,表示此指標變數指向的記憶體地址,而*p表示此指標指向的記憶體地址中存放的內容。

2、數量形式不同。

p如果使用%p來輸出的話,它將是一個16進位制數。*p一般是一個和指標型別一致的變數或者常量。

3、定義不同。

p存放的是地址,而*p是讓程式去那個地址取出資料。

例子:#include

void main()

輸出結果為:3,3,4;

解釋:*p++:是先取出*p的值,再使p加1

//p是個指標,給p加1,相當於讓p指向了x所在地址的下一個位置,而對於x則是沒有任何影響

(*p)++:是使*p的值加1.

//*p則是p指向的位置對應的值,題目中是*q,所以此時的*q就是x的值,為3,當輸出*q之後,再給*q即x自加1,綜上所述,x就會變為4

3樓:匿名使用者

先要理解地址和資料,你可以想象有很多盒子,每個盒子有對應的號碼,那個號碼叫做「地址」,而盒子裡放的東西叫做「資料」。

上面就段理解了,*p和p的區別就不難解釋了。

p是指標變數,用來存放地址,你可以認為是上面所說的盒子的號碼,「*」是解引用操作符,你可以把它理解成開啟盒子,*p就是開啟p號盒子,取出裡面的資料。

簡單來說,你記住,p存放的是地址,而*p是讓程式去那個地址取出資料。

4樓:雲南新華電腦學校

一、表示的東西不同

*p表示p代表相應資料型別在儲存

單元中儲存的首地址,而這個儲存單元儲存的是相應型別資料的數值。

**p表示p也表示地址,簡單的說,這個地址對應的儲存單元儲存的數也是一個地址,而不是數值,而這個被儲存的地址對應的儲存單元儲存的資料才是真正的相應型別的數值。

5樓:匿名使用者

借用一樓的回答,列印的時候,你可以參照下述列印,可能你就明白了。

int x = 3;

int *p, *q;

p = &x, q = &x;

printf("p=%p,p=%d\n", p, *p);

printf("%d\n", *p++);

printf("p=%p,p=%d\n", p, *p);

printf("-----\n");

printf("%d\n", (*q)++);

printf("%d\n", x);

你列印的結果應該是:

p=某地址,p=3

q=**=某地址+4/8(根據系統位數是4或者8),p=隨機值-----

q=3q=4

6樓:匿名使用者

char *p其實也可寫成char* p

char*表示指向char型別的指標

這時p就是指標,*p是指向的char變數

祝學習進步!

等你熟練使用指標的時候,一切都是指標,連陣列和函式,都變成了指標。之所以使用指標是因為,很多情況下,編譯和執行內部,都採用轉化成指標的方式,所以使用指標可以優化程式

指標的使用沒有要求,也沒有限制,隨個人對指標掌握的程度。

常見的如,對字串的操作,傳值呼叫,陣列,函式,等等。

7樓:匿名使用者

在你家裡有一部**p,你要給中國銀行打**怎麼辦?你就使用**的記憶功能找出中國銀行的**號碼p,這個號碼是指向中國銀行的。我們就能通過這個**號碼訪問中國銀行*p(*p表示中國銀行提供的功能)

號碼儲存在p中,*p是通過**號碼訪問到中國銀行這個值

還有一點。你家**總有一個地方擺放吧,也就是說你加**p也是有一個地址的這個地址就是」你家"也就是&p

8樓:匿名使用者

void ergod(void (*doit)(int))}void printa(int a)

void printb(int a)

int main()

這是一個函式指標的應用

執行時根據你傳的不同的函式指標而執行的不同的操作列印出b:0

b:1b:2

b:3b:4

b:5b:6

b:7b:8b:9

9樓:民大幽靈

第一個:p為帶回一個指標的函式,該指標指向double型資料,第二個:p是指向函式的指標,該函式返回double型值

10樓:傲世修羅王

這種只有你慢慢去理解,時間長了就懂了,別指望一下就懂了

11樓:惡魔王子

p是指一個變數,它代表一個數值,*p則代表一個地址

c語言的指標部分*p與p的區別是什麼?

12樓:夏日絕

p是指標變數,其值是一個變數的地址。p收到了哪個變數的地址,就指向哪個變數。該變數成為p的物件。

*p是p所指向的物件的值。

例如:int i=3,*p;

p=&i; 注意:p收到i的地址,故p指向i,i是p的物件。

printf("%d,%d\n",i,*p); 輸出:3,3 注意:*p是p所指向的物件的值,即i的值。

c語言c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

13樓:酒天縱尤晟

賦值的時候*p表示這是一個指標,p表示是一個數

而用的時候如果p是一個指標,那麼*p表示所指向的內容,p本身存著一個地址。

14樓:莘赩蔚日

intpp=5;

//開闢4位元組記憶體給pp,其中存放的是5的二進位制值;

int*p=&pp;

//開闢4位元組記憶體給p,其中存放的是pp的地址值(只有定義成int*型別的才能存放地址值);

15樓:墨澄邈馮曼

舉個例子:

inta[5]=;

int*p;

p=&a[2];

++*p;//等同於++a[2],使p指向的值加1++p;//等同於p=a[2+1],使p指向目標陣列中的下一個元素a[3]

c語言的指標部分 *p與p區別

16樓:楓璽

c語言的指標部分 *p與p區別如下:

1、作用不同

*p表示此指標指向的記憶體地址中存放的內容。

p是一個指標變數的名字,表示此指標變數指向的記憶體地址。

2、輸出內容的格式不同

*p常用在一個和指標型別一致的變數或者常量。

p輸出一個指標的地址,通常是輸出一個16進位制的數。

3、效果不同

*p是讓編譯器從指定的地址中讀取出資料。

p是用來存放要讀取資料的地址。

擴充套件資料c語言中使用指標的作用:

1、指標使程式的不同部分能夠共享資料

類似於共享記憶體,如果將某一個資料值的地址從一個函式傳遞到另外一個函式,這兩個函式就能使用同一資料。

2、利用指標,能在程式執行過程中預留新的記憶體空間大多數情況下,可以看到程式使用的記憶體是通過顯式宣告分配給變數的記憶體。但是在很多應用場合中,可能程式執行時不清楚到底需要多少記憶體,使用指標可以讓程式在執行時獲得新的記憶體空間,並讓指標指向這一記憶體更為方便。

3、指標可以用來記錄資料項之間的關係

在高階程式設計應用中,指標被廣泛應用於構造單個資料值之間的聯絡。比如,程式設計師通常在第一個資料的內部表示中包含指向下一個資料項的指標(實際上就是連結串列了),來說明這兩個資料項之間有概念上的順序關係。

17樓:匿名使用者

p是指標變數,其值是一個變數的地址。p收到了哪個變數的地址,就指向哪個變數。該變數成為p的物件。

*p是p所指向的物件的值。

例如:int i=3,*p;

p=&i; 注意:p收到i的地址,故p指向i,i是p的物件

printf("%d,%d\n",i,*p); 輸出:3,3 注意:*p是p所指向的物件的值,即i的值。

祝學業進步!

18樓:匿名使用者

我舉個例子吧:

int k = 5;

int *p = &k;

這時*p就表示k的值5,而p表示的就是k的地址

19樓:龍嘯天風

賦值的時候*p表示這是一個指標,p表示是一個數

而用的時候如果p是一個指標,那麼*p表示所指向的內容,p本身存著一個地址。

20樓:鏡面世界

呃⋯⋯第二個前面無運算子相當於p,有運算子且p是函式名或函式指標時,加括號相當於p,不是則無意義,p是函式名且返回指標且是呼叫時,不加括號是返回的指標的間接引用,第一個p不是指標的話無意義,如果是指標(什麼指標都行,包括函式指標等不常用的,但不能是野指標,執行時會報錯),如果這個表示式前面是運算子號,相當於p,如果前面是另一個表示式,是*p與那個表示式位與,p是函式指標時加括號相當於p,p是函式指標或函式的二級指標且該函式返回引用時是返回的引用的記憶體地址。(呼!累死我了,給個滿意啊!

看不懂的話等我有時間弄個**)

21樓:匿名使用者

int pp=5; //開闢4位元組記憶體給pp,其中存放的是5的二進位制值;

int *p=&pp; //開闢4位元組記憶體給p,其中存放的是pp的地址值(只有定義成int *型別的才能存放地址值);

22樓:言玉甚人

p中放的是地址

int a=321;

int *p=a;

其實a是一個地址的別名,這樣方便人們識別;

p也是一個地址,並且儲存空間中的這個地址中放的是變數a即321這個數在儲存器中的地址,而「*」的作用就是將p這個地址中存放的數所代表的地址中所存放的資料。

23樓:顛兒父

int a = 1; // 記憶體中a有一個地址比如:

0x11 中存的值是 1

int *p = &a; // 記憶體中p有一個地址比如:0x22 中存的值是 0x11

p的值是0x11, *p的值是1

c裡的p和p有什麼區別p是指標

p是取得指標p所在的地址的值,而 p是取指標p所在的地址 c 的指標變數中,p與p有什麼區別?include void main 程式輸出屬結果 p 5 p 0x0012ff7c press any key to continue p指向的是地址,是解除操作符,加在p前面是為了獲取儲存在這個地址的值...

c語言中p0表示C語言中p0表示

也得看p的定義了 如果int p p 0 則是把p執行的int空間的值修改為0如果int p p 0 則是把指向int空間的指標置為0。上面這幾個例子,都得考慮p是否指向了有效記憶體位置,否則是危險的操作。完整的範例 int a int p a p 0 相當於p指向的int空間,即a的值被改為0瞭如...

C語言連結串列中的P NULL是不是指當指標P指到連結串列中的最後結點時結束迴圈

是p指向最後一個節點的下一個節點迴圈才結束。因為最後一個節點 p不等於null,而最後一個節點的next為null,所以是最後一個節點的next。null為空,就是空指標的意思,它實際指向了一個不存在的位置。p!null就是說當p不為空的時候繼續迴圈,指向空的時候停止迴圈 資料結構連結串列中,p是指...