Re: [問題] 指標與陣列宣告?

看板C_and_CPP (C/C++)作者 (幽光)時間14年前 (2011/11/26 08:29), 編輯推噓2(207)
留言9則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《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

11/26 08:40, , 1F
11/26 08:40, 1F

11/26 09:54, , 2F
char name[2][5]={"ab","cd"}, char *p=name;
11/26 09:54, 2F

11/26 09:55, , 3F
puts(p), ++p, puts(p); 這本來就不多情況會用到.
11/26 09:55, 3F

11/26 09:57, , 4F
無視上面兩行,推錯. http://codepad.org/vFVkGIEo
11/26 09:57, 4F

11/26 18:07, , 5F
報warning還是會動的意思就是代表有的時候就不會動了XD
11/26 18:07, 5F

11/26 19:44, , 6F
為什麼你要用'數值'來思考呢?把array當成一整體不好嗎
11/26 19:44, 6F

11/26 19:47, , 7F
硬是要把他割成好幾部分...
11/26 19:47, 7F

11/26 21:56, , 8F
樓上說得是^.^ 但是a[10]跟b[20]兩者我就是覺得無法比較
11/26 21:56, 8F

11/27 17:30, , 9F
這帳號跟 hostname 真糟糕 XDD
11/27 17:30, 9F
文章代碼(AID): #1Eq3BM5F (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1Eq3BM5F (C_and_CPP)