c語言裡p a和p a有什麼區別

2021-03-17 19:21:36 字數 6091 閱讀 1888

1樓:song宋

p->a相當於乙個變數,左邊的就是乙個變數位址,右邊的就是乙個變數

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

2樓:匿名使用者

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

舉個例子有個類(或結構)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

3樓:匿名使用者

->指標操作符的優先順序非常高,。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*/

4樓:丿北城丨涼築

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的位址」是正好是相反的操作。

5樓:阿凡達

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

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

6樓:匿名使用者

在用的時候完全可以混用

這是在搞笑嗎

7樓:季成佟橋

你說的復*(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和p=&a有什麼區別

8樓:非常可愛

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));

9樓:育知同創教育

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

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

10樓:匿名使用者

如果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賦值。

11樓:匿名使用者

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的位址。

12樓:匿名使用者

對於指標來說,

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

p = a[0],把

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

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

13樓:天雨下凡

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

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

int *p,a;

p=&a;

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

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

14樓:匿名使用者

#include

int main()

15樓:平野律子

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

16樓:爵爺

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

17樓:百度使用者

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

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

18樓:

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

例如:int *p;

p=&b;

*p=a[0];

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

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

c語言中p->a是啥子意思

19樓:匿名使用者

p 是乙個結構體或者共用體型別資料的指標。

p->a表示訪問該指標上,名為a的資料成員。

等效於(*p).a

20樓:匿名使用者

p是乙個結構體型別的指標變數,這個結構體中有乙個屬性a,這個語句就是取他指向的物件的屬性元素a

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

21樓:woshi菜鳥

p=&a,p的值是a的位址,

*p=&a,a的值是a的位址,

*是取內容符!!!

22樓:匿名使用者

inta;int*p=&a;相當於int*p;p=&a;記住就行了;除了定義的時候,其他時候*p(正常情況)只能等於內容(a的值);

23樓:薩好慕仝金

在定義指標的同時讓指標指向某個位址

如int

*p=&a;不能直接使用*p=&a;

p=&a;代表的是讓p指向變數a的位址

24樓:之飛蘭保岑

總得來說沒區別,就是指標初始化的時間不同而已int*p

=&a;//這裡p宣告的時候直接初始化它的值為變數a的位址int*p;//宣告指標p,p的值不確定可能指向任何位址,p=&a;//顯示初始化使p指向a的位址

25樓:狄廣英勤璧

*p=&a;是將a的位址賦值給*p,結果會是乙個十六進製制的數。

第二個是讓p指向a的位址空間。*p的傎和a相等。

inta=2,*p;

*p=&a;

列印*p應該是乙個位址值,很長一串,

p=&a;

打*p印結果會是2;

c語言中,p=&a 那麼*p與a的區別是什麼?

26樓:星呈幻

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的位址」是正好是相反的操作。

27樓:失落血天使

首先 a和p都是變數 1000是常量,這裡只有a和p分配了記憶體,但是1000和1沒有

p 是指p的值,也就是1000

&a 是指a的記憶體位址

*p 是指p的記憶體位址

a 是指a的值也就是1

1 是a的值,放在分配給a的位址裡

1000 是p的值,放在分配給p的位址裡形象點說 ,a和p是房子

1和1000是住戶,1 住在a裡 1000住在p裡p 是指p的住戶

&a 是指a的門牌

*p 是指p的門牌

a 是指a的住戶

1和1000 是住戶

書的話,譚浩強的 c語言程式設計第3版 裡面有詳細的說明帖子就不曉得咧·······

Pa和Pa有什麼區別Pa0和Pa0有什麼區別

舉個例子吧 a是乙個陣列,它在記憶體中的初始位址比如說是0x11111111 簡單假設 且a 0 的值是1,也就是說,記憶體0x11111111中儲存的值是1。於是,a 0 0x11111111,a 0 1。int p p a 0 指標p會有乙個自己的記憶體位址,通常占用4個位元組 比如初始位址是0...

資料結構C語言,資料結構和C語言有什麼區別?

typedef struct qnode qnode,queueptr 定義兩個新資料型別qnode,queueptr,相當於 typedef struct qnode qnode typedef struct qnode queueptr 使用方法 qnode qdata struct qnode...

c語言中3 4和3 0 4 0有什麼區別啊

c語言中bai3 2 9 4和3.0 2 9 4.0區別為 資料型別不同 du計zhi算過程不同 計 算結果不同。dao 一 數回據型別不同 1 3 2 9 4 3 2 9 4的資料型別為 答int整數型別。2 3.0 2 9 4.0 3.0 2 9 4.0的資料型別為double雙精度浮點數型別。...