Re: [問題] 指標與陣列宣告?
※ 引述《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
11/26 09:54, 2F
→
11/26 09:55, , 3F
11/26 09:55, 3F
→
11/26 09:57, , 4F
11/26 09:57, 4F
→
11/26 18:07, , 5F
11/26 18:07, 5F
→
11/26 19:44, , 6F
11/26 19:44, 6F
→
11/26 19:47, , 7F
11/26 19:47, 7F
→
11/26 21:56, , 8F
11/26 21:56, 8F
推
11/27 17:30, , 9F
11/27 17:30, 9F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章