-
1 # 後的與我
-
2 # 髒話比謊話乾淨558
int *p宣告瞭一個整型指標變數。
p=s 是將 s的值附給 p ,當然s也要是地址或指標型別的
*p 是p所指向的儲存空間,是一個整數,就是把s這個整數寫入到 p 所指向的地址。
-
3 # 活潑風聲7x
int * p是宣告一個指向整形資料的指標p,不知道你這個s變數是幹什麼的,但p=s是把變數s的值賦給指標變數p,這時p存的是地址,*p=s是把變數s的值存到指標p所指向的記憶體單元中。
C語言裡的。
*p=s
把s的值賦給指標p指向的記憶體(陣列)
p=*s
把指標s指向的值賦給變數p
-
4 # 既往不咎886
char *) p 這種寫法是不是常用於型別的強制轉換?是,用於將非char型別的指標轉換成char型別的指標
char * P 的意思是定義一個字元指標,它的值是一個字串(或陣列)的起始地址
如:char *p="hello!"; p指向字串hello!
又如:
char a[10]="world!",*p;
p=a;
p指向字元陣列a,a的值為字串world!,p也指向字串world!
-
5 # 使用者3179433186306055
首先你要明白,a是個十六進位制的地址常量,a其實就是a[0]這個數值的地址,也就是a=&a[0] , p這個字母一般把它定義為地址, *p就是p指向的數值的值,你卻把一個值定義為一個地址(*p=a 這種寫法是錯誤的),不符合常理。不能這樣定義, 只可定義為p等於a ,也就是*p等於a[0],p指向a[0], 你所求的是 *(p+2)的值,也就是求 a[3]的值。 因為有個定理因為當p=a,也即*p=a[0]時 那麼 a[1]==*(p+1) a[2]==*(p+2) ..... 依次類推 a[i]==*(p+i) ,你所求的就是 *(p+2) 就是a[2],也就是3. 陰差陽錯,你定義的錯了,結果卻對了,我也有點糊塗了。這是你的跑圖正確的用法我知道你的問題了,你寫的沒錯。 你定義的時候,同時定義了陣列和地址變數並且賦值,你用的是逗號隔開的,不是分號,你所謂的*p=a 其實是 int *p=a, 也就是 int *p ; p=a;一句話,你寫的並沒有錯。只是容易誤解。歡迎大家給我點贊,這麼多回答的,就我才是明白人。
回覆列表
(*p)[3]是說p指向一個二維陣列,陣列列數為3列,行數不定,比如int a[5][3];p=a;所以p是一個二維陣列指標。而*p[3]呢是一個指標陣列,即p[0],p[1],p[2]分別都是一個指標,如int *p[3];int a[3],b[3],c[3];p[0]=a;p[1]=b;p[2]=c;這樣可以理解麼