線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1594
推到 Plurk!
推到 Facebook!

指標陣列的問題

尚未結案
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-18 08:06:52 IP:59.104.xxx.xxx 未訂閱
int *a[10] 與int (*a)[10] 的區別在哪?? 它們要怎麼解釋? char **p={"China","Microsoft","C "};//這種雙重指標宣告是不是不行的? 我用編譯器這邊有顯示無法初始值 char *p[10]={"China","Microsoft","C "};這樣是ok的 謝謝 發表人 - syao 於 2005/05/18 08:26:23
repsolGP
一般會員


發表:5
回覆:12
積分:3
註冊:2005-03-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-18 09:19:09 IP:202.168.xxx.xxx 未訂閱
1.[]運算順序高於* 2.簡單來說單一指標搭配一維陣列使用   雙重指標搭配二維陣列 3.char *p[10]={"China","Microsoft","C++"};   也可以宣告成char p[3][10]={"China","Microsoft","C++"};   可以推出 *p==p[0]=='C'字元的位址==&p[0][0]   所以**p==*p[0]=="C"   同理*(p+1)==p[1]=='M'字元位址   所以**(p+1)==*p[1]==M    我所知到大概是這樣 有錯的話還請告知   
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-18 10:49:43 IP:59.104.xxx.xxx 未訂閱
char *p[10]={"China","Microsoft","C "};//ok char (*p)[10]={"China","Microsoft","C "};//error 加了括號的(*p)這樣用法不可以~~ *p[10]這種叫做指標陣列~~ 那(*p)[10]用法是怎樣的??懂得人可以舉例一下嗎?? 還有雙重指標 可以指向二維陣列嗎?? int arr[10][10]; int **p=arr; 這樣好像不行~~雙重指標通常是怎麼用~~&二維陣列可以用雙重指標表示出來嗎??(我指的是宣告時候ex:int **p=arr;類似這樣不過我這樣好像不對compiler出現錯誤) 謝謝 發表人 - syao 於 2005/05/18 10:54:03
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-18 11:20:01 IP:61.228.xxx.xxx 未訂閱
syao, 關於char (*p)[10] 這個部分你可以參考以下RICHTOP回覆的問題http://delphi.ktop.com.tw/topic.php?TOPIC_ID=70264
repsolGP
一般會員


發表:5
回覆:12
積分:3
註冊:2005-03-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-18 11:21:36 IP:202.168.xxx.xxx 未訂閱
恩 用範例來說明好了    
 
#include 
int main()
{
 int a[]={0,1,2,3,4};
 int *p[]={a,a 1,a 2,a 3,a 4};
 int **p=p;
 printf("**p=%d\n",**pp);
 printf("*(*(pp 2) 2))=%d\n,*(*(pp 2) 2));
}
輸出的結果: **pp = 0 *(*(pp 2) 2) = 4 ps: *pp == p[0]== a **pp == *a == 0 pp 2 == p 2 *(pp 2) == p[2] == a 2 *(pp 2) 2 == a 4 所以*(*(pp 2) 2)=4 如果還是不懂 我覺得你畫圖 會比較清楚
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-18 11:35:24 IP:59.104.xxx.xxx 未訂閱
repsolGP您好: 我用編譯器編譯你的程式碼但都失敗~~@@ 不知道是什麼問題~~ int **p=p;//編譯器在這行這過不去 我用dev-c & VC7編譯 謝謝
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-18 11:45:12 IP:140.129.xxx.xxx 未訂閱
大家好:    針對syao最早的提問,我試著寫個程式來做測試,如下請參考. 優先順序的確會影響對該變數的解讀與型態的賦予. 如果要宣告陣列並設定初始值,光給指標是不夠的,必須是明確的陣列形式(有[],長度可以不給,系統會自己算).    

#include 
#include     int main(int argc, char *argv[])
{ int k, c, len;
  int *ap[10];   // 全等於 int * (ap[10]); ap 是擁有十個元素的陣列,元素的資料型態為:(int *)。 
  int (*pa)[10]; // pa 是一個指標,指向含有十個整數的陣列。 
 
  char *pstr[]={"China","Microsoft","C  "}; // 初值設定必須給定足夠的空間! 
  char **p;
  
  printf("ap=%8x (ap 1)=%8x\n",   ap, ap 1);
  printf("pa=%8x (pa 1)=%8x\n\n", pa, pa 1); // 增加 40 (或十六進位 0x28);
  
  
  printf("using pstr:\n");
  for (k=0; k<3;   k)
     printf("-:<%s>\n", k, pstr[k]);
     
  p = pstr;
  printf("using p:\n");
  for (k=0; k<3;   k)
     printf("-:<%s>\n", k, p[k]);
     
  printf("using p[][]\n");   
  for (k=0; k<3;   k)
     { len = strlen(p[k]);
       printf("-:", k); 
       for (c=0; c
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
repsolGP
一般會員


發表:5
回覆:12
積分:3
註冊:2005-03-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-18 11:56:53 IP:202.168.xxx.xxx 未訂閱
試試看 下面的CODE
#include 
int main()
{
 int a[]={0,1,2,3,4};
 int *p[]={a,a 1,a 2,a 3,a 4};
 int **pp = p;//這邊有錯打太快了 抱歉
 printf("**p=%d\n",**pp);
 printf("*(*(pp 2) 2))=%d\n",*(*(pp 2) 2)); //漏掉第二個雙引號
}
這樣應該可以
系統時間:2024-11-22 7:59:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!