看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《thank1984 (把握當下)》之銘言: : 問題(Question): : #define COLS 60; : 宣告方式1: char *ptr[COLS]; : 宣告方式2: char (*ptr)[COLS]; : 宣告方式3: char *(ptr)[COLS]; : 我想請問各位大大上面這三種宣告方式有什麼差別嗎 小弟搞不太清楚這之間的關係 : 麻煩各位大大解答 謝謝 我也搞不懂,查了一下google,未見實際用法? 在Cprograming.com上看了一篇討論,最後也沒有人跳出來解釋用法 我下面試了一個例子,work,所以略述我所見: /**************************************/ #include <stdio.h> #include <stdlib.h> int main(void) { char (*pname)[10]; char name[10] = "123456789"; pname = &name; printf("\n%c\n",*(name + 3)); printf("\n%c\n",*(*(pname) + 3)); return 0; } /************************************/ 執行結果: smalldick@smalldick-laptop ~ $ gcc -o a.out pointer_array.c && ./a.out 4 4 /************************************/ 大概是這樣 pname 是存name這個陣列起始元素位址的位址 而name是存name陣列起始第一個元素的位址 所以在操作pname的時候才要反參考兩次. ps:我後面把name改成name[15] = "1234567890abcd"; 結果pname還是可以指向name,不過gcc在編譯的時候會報warning,但是還是會動. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.187.250
purpose:#1ERylPtG 11/26 08:40
EdisonX:char name[2][5]={"ab","cd"}, char *p=name; 11/26 09:54
EdisonX:puts(p), ++p, puts(p); 這本來就不多情況會用到. 11/26 09:55
EdisonX:無視上面兩行,推錯. http://codepad.org/vFVkGIEo 11/26 09:57
purincess:報warning還是會動的意思就是代表有的時候就不會動了XD 11/26 18:07
loveme00835:為什麼你要用'數值'來思考呢?把array當成一整體不好嗎 11/26 19:44
loveme00835:硬是要把他割成好幾部分... 11/26 19:47
DEATHX:樓上說得是^.^ 但是a[10]跟b[20]兩者我就是覺得無法比較 11/26 21:56
Bencrie:這帳號跟 hostname 真糟糕 XDD 11/27 17:30