請教p a與p a,請教p a與p a 0 區別

2021-05-26 00:52:32 字數 5840 閱讀 7356

1樓:匿名使用者

p=a中的a如果是一個陣列的話,a是一個首地址, p=&a[0] 同樣是陣列a的首地址。 也就是說a與&a[0]的地址是相同的,

2樓:匿名使用者

你的p和a是什麼啊,有沒有*,p = &a又是怎麼定義的啊,不明不白

3樓:匿名使用者

一個是一維一個是多維。

請教p=a與p=&a[0]區別

4樓:手機使用者

p=a中的a如果是一個陣列的話,a是一個首地址, p=&a[0] 同樣是陣列a的首地址。 也就是說a與&a[0]的地址是相同的, 檢視原帖》

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

5樓:匿名使用者

舉個例子吧:

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記憶體區通常是不可寫的,這樣就會報錯。

6樓:匿名使用者

*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[0]與p=a[0]有什麼區別?

7樓:匿名使用者

對於指標來說,

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

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

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

8樓:匿名使用者

這個是指標和變數的區別:

第一個表示變數p存的是陣列a的地址值,即表示指向陣列a

第二個表示p和陣列a的第一個元素的值一樣。

9樓:

有啊,*p是個指標,他儲存的是一個變數的地址。你把a[0]裡的資料賦給他,是儲存在那個變數中,不是在存*p中。另一個p是個變數,a[0]中的資料時存在p中

例如:int *p;

p=&b;

*p=a[0];

b==a[0] 值是放在b中

另一個是放在p中 ,不同的

10樓:

都是賦值語句,p的資料型別不同,被賦值的對像不同而已

*p=a[0] ==>賦值對像不是變數p本身,而是它所指向的對像

p=a[0] ==>賦值的對像就是變數p本身

c語言中*p=&a和p=&a有什麼區別

11樓:非常可愛

c語言中*p=&a和p=&a只有一個區別就是指標初始化時間不同。

p=&a:p是1維指標;

*p=&a:p是2維指標;

p=&a示例:

inta;

int*p;

a=5;

p=&a;

printf("valueis:%d.",*p);

擴充套件資料*p=&a的使用

int a, b, c;

int **p;

a = 5;

b = 6;

c = 7;

p = (int **)malloc(el_**t * sizeof(int *));

*p = &a;

*(p + 1) = &b;

*(p + 2) = &c;

for(int i = 0; i < el_**t; i++)printf("value is : %d\n", **(p + i));

12樓:育知同創教育

總得來說沒區別,就是指標初始化的時間不同而已int *p = &a;//這裡p宣告的時候直接初始化它的值為變數a的地址

int *p;//宣告指標p,p的值不確定可能指向任何地址,p = &a;//顯示初始化使p指向a的地址

13樓:匿名使用者

如果a都是基礎型別, 而不是指標, 比如a為int那麼 p=&a, 是把a的地址,賦值給p, p需要是int *型別。

而*p=&a 是把a的地址賦值給*p, p需要是int **型別。

注意 如果是int *p=&a;這種形式

是定義int *型別的p, 並給p初始化為&a。 等效於int *p;

p=&a;

還是給p賦值,而不是給*p賦值。

14樓:匿名使用者

1.一般來說*p=&a的表示方法是錯的,*p=a和p=&a是正確的。

2.*p=a的意思:將a的值賦給p指標指向的地址的值;

3.p=&a的意思是:將a的地址賦給指標p;

4.區別:*p是一個值;p是一個地址;兩者完全不相同。

5.*代表著p指向的地址的值,簡單來說就是取值;&是取地址符號,取的是地址;p是指標,可以理解為所指向的值的地址,*p就是取p指標指向的地址的值,&a就是取a的地址。

15樓:匿名使用者

對於指標來說,

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

p = a[0],把

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

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

16樓:天雨下凡

這樣問說明你對指標的概念還不清楚,以下兩種方式等價:

一、先宣告指標,再給指標賦值

int *p,a;

p=&a;

二、定義指標的同時給它賦值

int a,*p=&a; //這裡的*p可以解釋成int * p,int *表示p是指向int型變數的指標

17樓:匿名使用者

#include

int main()

18樓:平野律子

舉個例子吧: 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記憶體區通常是不可寫的,這樣就會報錯。採納哦

19樓:爵爺

在定義指標的同時讓指標指向某個地址 如int *p=&a;不能直接使用*p=&a; p=&a;代表的是讓p指向變數a的地址

20樓:百度使用者

*p=&a;是將a的地址賦值給*p,結果會是一個十六進位制的數。 第二個是讓p指向a的地址空間。*p的傎和a相等。

int a=2,*p; *p=&a; 列印*p應該是一個地址值,很長一串, p=&a; 打*p印結果會是2;

21樓:

有啊,*p是個指標,他儲存的是一個變數的地址。你把a[0]裡的資料賦給他,是儲存在那個變數中,不是在存*p中。另一個p是個變數,a[0]中的資料時存在p中

例如:int *p;

p=&b;

*p=a[0];

b==a[0] 值是放在b中

另一個是放在p中 ,不同的

p是指標變數,*p=a和p=&a的區別

22樓:

1*p=a; //表示將a的值賦給p所指單元。

p=&a; //表示將p指向a單元,即將a單元的地址賦給p。

2int a,b;

int *pa,*pb;

a=10;b=20;

*pa=a;*pb=b; //這兩個語句有問題。pa,pb是野指標,沒有指向任何單元。

printf("%d,%d\n",*pa,*pb);

printf("%x,%x\n",pa,pb); //pa,pb的野指標,其值不確定。

printf("%x,%x\n",&a,&b); //輸出a,b的地址。

23樓:金色潛鳥

分清是語句裡還是宣告裡。

宣告 裡 int *p=a; 宣告 *p 是 int 型指標,初始化,讓 p 指向 a [陣列] 的始地址。

宣告 裡 int p=&a; 宣告 p 是 int型變數,不是指標,初始化,把變數 a 的地址 &a 賦給 p.

語句裡,若 p 是指標變數,

*p=a; *p 表示 值,把 變數 a 的當前值 賦給 指標。(指標指向的地址不變)。

p = &a; p 表示指向的地址, 把 變數 a 的地址 &a 賦給 p, 也就是讓指標指向 變數 a。

例如:int a=2, b=3;

int *p=&b; // 指標指向地址 初始化, 指向 b

printf("address: %p value:%d\n", p, *p); //輸出地址同 b, 數值 3

*p=a;

printf("address: %p value:%d\n", p, *p); //輸出地址同 b, 數值 2

p= &a;

printf("address: %p value:%d\n", p, *p); //輸出地址同 a, 數值 2

---------------------

24樓:匿名使用者

這段**在一些編譯器是編譯不過的,因為你沒有給pa,pb賦值,pa,pb兩個指標指向**,根本不知道

*p=a 和 p=&a是完全不同的兩碼事

*p 是 p 指向的地址的值,改變了值不是改變了它的地址,而p=&a就是改變p所指向的地址,使之指向a

舉個例子說明一下

p=&a; //p儲存的是a的地址

*p=b; //並不是p儲存了b的地址,而是將b的值儲存到p所指向的地址的那個值,這句相當於a=b,最後改變了a的值,而非p所指向的地址

C語言中pa與pa有什麼區別

p a 0 令p所指向地址的內容等於a 0 p是一個一級指標 p a 0 令p所指向地址的內容等於a 0 的地址,p是一個二級指標。c語言中 p a 0 與p a 0 有什麼區別?對於指標來說,p a 0 表示向地址為p的記憶體區域賦值為a 0 p a 0 把變數p的值改為a 0 這個語句正常應用中...

郵政包裹PA04180555543和pa04180680843不知道怎麼查,找人幫忙

pa04180555543 2010 06 13 07 53 03 當前處理 包裹單已簽收 處理機構 榮灣鎮投遞班 處理時間 處理單位 郵件狀態 2010 06 07 17 09 41 衡陽市衡邵路所 交寄 回執 寄達地 湖南省長沙市 2010 06 09 18 26 00 長沙市 到達處理中心 2...

pa是什麼意思,pa00是什麼意思??

這是指標中的內容,p是一個指標,用來儲存地址,p a 0 0 的意思就是將a 0 0 的地址的值給p,也就是說p指向a 0 0 p是int型指標。p a 0 0 意思為將a 0 0 的地址賦值給p。p a 0 和p a 0 有什麼區別 舉個例子吧 a是一個陣列,它在記憶體中的初始地址比如說是0x11...