求C語言大神解答,為什麼地址P變化如何計算,P變化為什麼會導致a隨之變化。圖中第二題

2021-03-23 03:02:52 字數 6051 閱讀 9429

1樓:無人像你

(*p)++是先使用*p的值(*p等價於a)再使*p=*p+1 因此改變了a的值

求助c語言大神。指標問題。如果*p=&a, *p++和*(p++)怎麼計算,表示什麼啊?不懂啊?

2樓:

*p=&a是錯誤的,只能是int *p=&a才對,*是int的不是p的,*p意思是「取p指向的值」。如果a=3,那麼*p++的值3,然後p=p+1。*(p++)的效果與*p++一樣。

因為++的結合性是從右至左的,所以有沒有()是一樣的。

3樓:

操作符的運算優先順序,具體你自己去查

4樓:匿名使用者

++優先順序比間接訪問優先順序高,不過你這個問題中的a是什麼元素沒說

5樓:90後小白

如果是陣列那麼p就指向該陣列,p++指向下一個元素

c語言scanf(「%d」,p++)中,p為什麼已經指向a[4]後面的單元

6樓:尹珍貴族

p=a,p指向了陣列a的首地址,此時p可像陣列那樣操作,如p[0]=a[0]。

在下面的for迴圈中,i=4時結束迴圈,此時p自增了5次.即p=p+5。

所以p=&a[5].即p指向了a[5]的地址。

7樓:憤激澳匱

《從頭跨》休說大話,莫要自誇,山外有人家。天也忒大,地也忒大,挺要緊自家腳步從頭跨,從頭跨……

8樓:銷

迴圈五次每次++,就從指向a[0]變成指向a[5]了

c語言求大神,第十題為啥,*p不就是常量嗎?

9樓:匿名使用者

int *p;

*p = 20

這時還沒給p分配空間

所以訪問會出錯。

這個叫野指標。

10樓:匿名使用者

int *p;這表示申請一個int型的指標變數,指標p並沒有指向任何一個int型的變數,此時它只是個野指標,所以*p=20;是不合法的,正確方法如下:

int *p;

int a;

p = &a;

*p = 20;

11樓:

int *p定義的是一個整型指正。

12樓:匿名使用者

*p 是地址 不是變數

求c語言大神解題,詳細說說是什麼意思

13樓:匿名使用者

答案是1bc,a23吧

首先p是一個指標,指向「abc」的首地址的,也就是說p相當於是字元'a'的地址,就是*p= 'a'

同理 q是字元'1'的地址,就是說*q = '1';

呼叫函式之後呢, *x= *p = 'a'; *y = *q = 'a';

互換之後就變成了,1bc ,a23

14樓:千鋒教育

具體是交換兩個字串的首地址 ,

執行fun(p,q);後 p變成了「123」, p變成了「abc」

然後進行輸出

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

15樓:匿名使用者

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

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

16樓:匿名使用者

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

17樓:丿北城丨涼築

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

18樓:阿凡達

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

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

19樓:匿名使用者

在用的時候完全可以混用

這是在搞笑嗎

20樓:季成佟橋

你說的復*(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的區別是什麼?

21樓:星呈幻

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

22樓:失落血天使

首先 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版 裡面有詳細的說明帖子就不曉得咧·······

23樓:

&a取址 *p取值這沒有什麼可說的。

int *p; int a;

a的地址1000h,即&a == 1000h. p是指標,它本身也有存放它的地址,設1200h,

即&p == 1200h(win32下,指標本身長度32位即4位元組,可通過sizeof(p)得到). 這樣就是用到兩塊記憶體了。

p = &a; 即p == 1000h. 這是一個地址值,本質是值,即可以加減等操作的。但是加減後的p, *p可能就無法訪問了,因為它已經不指向a了,比如p == 1004h了,如果這是在某一函式裡操作的,而1004h地址並不本程式的地址空間裡,取*p時那就非法訪問,要崩潰的;但如果1004h地址正好是這函式裡另外一個int b;變數的地址,那*p的值就是b了。

*p表示取p指向地址的值,也就是1000h上的值; a = 1; 說明1000h上的值為1,所以*p == 1;a, 它本身只是一個符號而已,這個符號代表了地址1000h起的int型長(4位元組)的一個記憶體塊, a=1,就是記憶體塊放一個值1, 如果有彙編的思想,能更形象點:[1000h] = 1,根本不需要a,b,c...之類的字元來表示,直接對記憶體地址進行存取。

24樓:匿名使用者

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

1. int a = 1;

2. int *p; -> 他的地址是1000

3. p = &a;

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

1.在記憶體 某個 地址 放入一個int型的數字[1],這個 地址 符號名為 a

2.宣告一個指標,這個指標 在記憶體位置1000的地方 型別是指標,符號名為 p

3. [*p] 我們宣告時 就是 *p 這個形態 所以就叫他指標.

那麼:a 是記憶體某個地址的 符號,語法上我們用 &a 表示這個符號的真正記憶體地質。

*p 因為是型別是指標,我們不能賦予它值,只能給他一個要指向的地址,共享和修改那個地址裡的內容(先不考慮const語句),。指標p裡放著 a的地址,當電腦讀到 p 時,直接去找 裡面的地址去了。

p 指向地址,*p表示那各地址的內容。*p 英語裡就叫它 point p 即 指標p

過程:p = &a : p 複製 a的地址到自己的位置。

*p = 2 : 電腦判斷 p的型別,是指標,就跳到 p 裡的地址位置,在判斷型別,不是指標,就把當前位置裡的 值 改為 2,如果還是指標,就重複上面 直到遇到不是指標型別的地址。

至於名稱,就叫指標,變數是 總稱,變數 a, 變數 b, 給他們賦予範圍和型別 ,int型變數a,指標型變數p;

25樓:匿名使用者

首先我們明確a為一個變數 假設

定義是 int a;

再明確p是一個指標,假設定義為 int* p;

當我們定義了一個a是系統會分派一個記憶體給你用來存放他的數值,如 執行了a=10;後 這個記憶體就存放了一個10的數字,當我們要用到它表示的10時,直接用a替代就可以了。

現在我們再用 p=&a "&"叫取地址符,他是一個運算子。 "&a"就表示指向a有就是上面的那個存著10的記憶體的地址。如果我們用到a的時候,很明顯,我們不能直接用p了,因為他是一個地址而不是我們需要的10這個數,那怎麼辦呢?

我們這裡就可用"*"這個符號,他表示取這個指標所指記憶體上的資料,即 *p就表示a了用法什麼的都一樣。

26樓:辯一辯

*p就是a...

p是一個變數,其實它裡面存的值就是1000,它在哪個記憶體空間放著這個不可知。

而a是在第1000號空間放著的。&a的值等於p.而*p就是a(不只是相等),並且值等於1

27樓:匿名使用者

p, &a表示a在記憶體中的地址,p=&a 表示把a在物理中的地址給變數p,*p表示取出p在記憶體中的值,

因為a的值在記憶體中的地址與p相同,所以*p=a。

關於c語言方面的數個人覺的還是譚浩強的比較經典。

C語言題,求大神解答,c語言的題,求大神解答

include int main for i 0 iprintf d az i printf n for i 0 iprintf d af i printf n return 0 c語言的題,求大神解答 解 1 a項錯誤 有些不可見字元可放入緩衝區,例如 回車 空格。b項錯誤 有些輸入函式有緩衝區,...

C語言問題求大神解答,求大神解答一下C語言問題?

a b 2,n b 4 1 計算 裡面的,b 2,n n b 5 2 1,逗號表示式返回最後一個表示式的值 賦值表示式的值就是被賦給的值,即1 所以括號裡面結果為1 2 計算a 1 4,先計算等號右邊的值 5 則a 5,等價於a a 5 12 5 2 樓主你好。b 2,n b 其實就是兩條語句,第一...

c語言問題,求大神給解答,C語言問題,求大神給解答

type 35 bta p100 ds1191 pz38 type 35 bta p100 1 ds1191 1 pz38 1 type 35 2 press any key to continue include include include typedef struct node list,n...