c語言中,pa與pa,c語言中,pa0與pa0等價嗎

2021-03-04 08:49:29 字數 3370 閱讀 9513

1樓:匿名使用者

int p=a[0];和int *p=&a[0];

這兩個?你既然你問問題,你能把問題描述清楚嗎。

乙個是整型,乙個是指向整型的指標,當然不一樣。

在c語言中,表示式:*p=a[0]與p=a[0]有什麼區別?

2樓:匿名使用者

對於指標來說,

*p = a[0],表示向位址為p的記憶體區域賦值為a[0]。

p = a[0],把變數p的值改為a[0],這個語句正常應用中是錯誤的。變數p的值為記憶體位址,這樣賦值會丟掉p原來指向的記憶體。

正確給記憶體位址賦值應該使用第一句。

*p=&a[0] 和p=&a[0]有什麼區別

3樓:匿名使用者

舉個例子吧:

a是乙個陣列,它在記憶體中的初始位址比如說是0x11111111(簡單假設),且a[0]的值是1,也就是說,記憶體0x11111111中儲存的值是1。

於是,&a[0]=0x11111111,a[0]=1。

int *p;

p=&a[0];

指標p會有乙個自己的記憶體位址,通常佔用4個位元組(比如初始位址是0x22222222)。p的值是&a[0],也就是說從0x22222222開始,後面4個位元組中儲存的值是0x11111111。

*p的值就等於p所指向的記憶體位址中儲存的值,也就是a[0]。所以*p等於1。

如果*p=&a[0]的話,很容易出問題。比如說int *p之後,p的初始值可能是0xcccccccc(debug版本)或者0x00000000(release版本)。這個時候,如果你寫一句*p=&a[0]的話,將會把0xcccccccc或者0x00000000記憶體之後4個位元組的值變為0x11111111。

而0xcccccccc和0x00000000記憶體區通常是不可寫的,這樣就會報錯。

4樓:匿名使用者

*p=a[0] //將 a[0]的值賦給到p所指向的位置。

p=&a[0] //將 a[0]的位址賦給p則,如果:

int a[10];

int *p;

*p=a[0]; //1

p=&a[0]; //2

2句恆正確,1句則有可能引發記憶體非法訪問錯誤。

c語言中p=&a和p->a的區別,不是都表示指標p指向a嗎

5樓:匿名使用者

->只有在出現類的環境中才可用到,而&則隨時可用。

舉個例子有個類(或結構)x當中有整形成員a:

class x

;這時我們宣告該類的乙個物件a,並用你提到的第一句話來將a的位址賦值給指標p:

x a;

x* p = &a;

再寫語句如果需要呼叫p指向的位址中的變數,也就是物件a,那麼用如下表示式:

*p如果要訪問a中的成員a,那麼用如下表示式:

a.a如果想利用指標p來實現上述目的,那麼用如下表示式:

(*p).a

c++的編寫者將上述表示式簡單寫為:

p->a

6樓:匿名使用者

->指標操作符的優先順序非常高,。p->a是取得p指向結構體的成員a,等價於(*p).a

p=&a表示p是乙個指標,&a的位址賦予pstruct data

; /*定義結構體*/struct data * p;/*定義結構體指標*/struct data a = ;/*宣告變數a*/int x;/*宣告乙個變數x*/

p = &a ; /*讓p指向a*/

x = p->a;/*這句話的意思就是取出p所指向的結構體中包含的資料項a賦值給x*/

/*由於此時p指向a,因而 p->a == a.a,也就是1*/

7樓:丿北城丨涼築

a和p是變數,&a和*p是表示式,1和0x1000是常量a和*p表示的都是整形左值,p和&a表示的都是指標型左值,1和0x1000表示整形和指標型右值。(左右值的概念不清的話,google一下)

在記憶體中,a和p有儲存空間空間,a存放著1,p存放著0x1000,*p和&a沒有空間,他們的運算結果是在暫存器中存放的,1和0x1000也有空間,在程式的常量段存放。

*p按照stanley lippman的著作《c++ primer》中的描述,p是指標變數,*是解引用操作符,*p是乙個表示式,含義是「對指標變數p進行解引用操作」,這與表示式&a的含義「取整形變數a的位址」是正好是相反的操作。

8樓:阿凡達

p=&a 是對a的引用。p->a是指標p下的內容。對a的引用是對a起別名,對p進行操作就是對a的操作。

p->a的話,就是指標p指向的儲存單元的a。這個你對p操作的話就不會改變a。和前乙個是不一樣的!

9樓:匿名使用者

在用的時候完全可以混用

這是在搞笑嗎

10樓:季成佟橋

你說的復*(p++)h和*p++是等價的

但是這裡制的++是先用在加所以結果都是10要是程式是這樣的

#include

void

main()

,*p;

p=a;

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

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

p=a;

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

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

}結果就會變成11了

希望採納

c語言中*p=a[0]與*p=&a[0]有什麼區別?

11樓:gta小雞

*p=a[0],令p所指向位址的內容等於a[0],p是乙個一級指標;

*p=&a[0],令p所指向位址的內容等於a[0]的位址,p是乙個二級指標。

c語言中 int *p=a[0] 這樣表達對不對

12樓:待月上弦

這個表示式沒有語法錯誤,但是我估計不能達到你想要的結果,不知道你要表達什麼。給你分析下這個表示式的含義,這裡a[0]應該表示乙個位址,把這個位址賦給p,然後*p表示a[0]位址所指向的內容。我估計你的a是乙個一維陣列,你可能是想讓指標p指向a[0]這個元素,如果是這樣,則表示式應該改為int *p = &a[0]。

但是如果a是乙個二維陣列,則這個表示式有意義,沒有任何問題!

13樓:月光疾風

不對,因為p是指標,因此只能對應a[0]的位址,a[0]前面加個取位址符:

int *p=&a[0];

14樓:茜灬一

差不多,就是a應該是int陣列

c語言中與的區別,C語言中 與 的區別

區別如復下表 擴充套件資料具體區別制的例子 bai1 c 語言輸入輸出du printf a d,b d zhi,a,b scanf d d d a,b,c 2 vb 語言的輸入輸出 inputbox x 輸入 x 的值dao print x x 而且,這兩種運算子,還分為字首運算和字尾運算 如 i...

C語言中的while與for,c語言中while的用法

如果編譯器有優化處理,這兩個與無條件的goto標號做的迴圈沒有區別 label goto label 等效的,c語言轉成彙編 在c51中常見,keil uvision4中除錯程式,就能對比的看到彙編 和c51 的對比,其它c的我不知道有沒有中間生成彙編碼,但單步除錯,看到機器碼時也是有反彙編出來的 ...

c語言中《與《的區別是什麼,C語言中 與 的區別是什麼?

舉個例子你就明白了。像 這些比較常用一點兒。比如 int a a 2 與 a 2 效果是不一樣的,a 2,並未改變a的值,但是a 2,效果等於a a 2 a的值實際上是增加了2.所以 也是一樣的,a 2這句只是一個運算,就是a左移2位,但是並未改變a的值,但是a 2,相當於 a a 2,改變了a的值...