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...