全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:927
推到 Plurk!
推到 Facebook!

記憶體址位問題

尚未結案
syao
初階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-29 21:38:10 IP:203.70.xxx.xxx 未訂閱
#include 
#include     int main()
{
   char *name[]={"hello","world"};
   
   printf("%p\n",name);
   printf("%p\n",name 1);
   
   
   printf("%c %p\n",name[0][0],&name[0][0]);
   printf("%c %p\n",name[0][1],&name[0][1]);
   printf("%c %p\n",name[0][2],&name[0][2]);
   printf("%c %p\n",name[0][3],&name[0][3]);
   printf("%c %p\n",name[0][4],&name[0][4]);
   printf("%c %p\n",name[0][5],&name[0][5]);
   
   printf("%c %p\n",name[1][0],&name[1][0]);
   printf("%c %p\n",name[1][1],&name[1][1]);
   printf("%c %p\n",name[1][2],&name[1][2]);
   printf("%c %p\n",name[1][3],&name[1][3]);
   printf("%c %p\n",name[1][4],&name[1][4]);
   printf("%c %p\n",name[1][5],&name[1][5]);
  
    
    system("pause");
    return 0;    }    輸出結果如下 :    0022FF70 
0022FF74 
 
h 00403000
e 00403001
l 00403002
l 00403003
o 00403004
  00403005    w 00403006
o 00403007
r 00403008
l 00403009
d 0040300A
  0040300B        
    #include 
#include     int main()
{
   char name[2][10]={"hello","world"};
   
   printf("%p\n",name);
   printf("%p\n",name 1);
   
   
   printf("%c  %p\n",name[0][0],&name[0][0]);
   printf("%c  %p\n",name[0][1],&name[0][1]);
   printf("%c  %p\n",name[0][2],&name[0][2]);
   printf("%c  %p\n",name[0][3],&name[0][3]);
   printf("%c  %p\n",name[0][4],&name[0][4]);
   printf("\\0 %p\n",&name[0][5]);
   printf("\\0 %p\n",&name[0][6]);
   printf("\\0 %p\n",&name[0][7]);
   printf("\\0 %p\n",&name[0][8]);
   printf("\\0 %p\n",&name[0][9]);
   
   
   printf("%c  %p\n",name[1][0],&name[1][0]);
   printf("%c  %p\n",name[1][1],&name[1][1]);
   printf("%c  %p\n",name[1][2],&name[1][2]);
   printf("%c  %p\n",name[1][3],&name[1][3]);
   printf("%c  %p\n",name[1][4],&name[1][4]);
   printf("\\0 %p\n",&name[1][5]);
   printf("\\0 %p\n",&name[1][6]);
   printf("\\0 %p\n",&name[1][7]);
   printf("\\0 %p\n",&name[1][8]);
   printf("\\0 %p\n",&name[1][9]);
   
   system("pause");
   return 0;    }    輸出結果如下 :    0022FF50
0022FF5A    h  0022FF50
e  0022FF51
l  0022FF52
l  0022FF53
o  0022FF54
\0 0022FF55
\0 0022FF56
\0 0022FF57
\0 0022FF58
\0 0022FF59    w  0022FF5A
o  0022FF5B
r  0022FF5C
l  0022FF5D
d  0022FF5E
\0 0022FF5F
\0 0022FF60
\0 0022FF61
\0 0022FF62
\0 0022FF63
請按任意鍵繼續 . . .    
0022FF70 //name 指標區塊是存放 hello的'h' (00403000)起始位址嗎? 0022FF74 //name 1 指標區塊是存放 world的'w' (00403006)起始位址嗎? 1.請問指標陣列是字串直接存入記憶體而不是陣列所有它是靠name指標指向字串起始位址嗎??所以name位址跟字串位址不是連續 2.陣列指標是指向陣列起始位址,字串是存入陣列內而不是直接存入記憶體嗎?? 以上是我自己想法~~@@~~如果不對請指教 謝謝 發表人 - syao 於 2005/07/29 21:39:26 發表人 - syao 於 2005/07/29 21:40:22
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-30 00:15:44 IP:211.22.xxx.xxx 未訂閱
1.0022FF70 //name 指標區塊是存放 hello的'h' (00403000)起始位址嗎? ans:是,更正確的說應該是*name[0],這個第一個指標陣列元素的指標所指向的位址。    2.0022FF74 //name+1 指標區塊是存放 world的'w' (00403006)起始位址嗎? ans:應該說是name指標型態大小的所位移的下一位址    3.請問指標陣列是字串直接存入記憶體而不是陣列所有它是靠name指標指向字串起始位址嗎??所以name位址跟字串位址不是連續 ans:不太好意思,不懂你的意思!
syao
初階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-30 01:37:12 IP:203.70.xxx.xxx 未訂閱
Stallion 謝謝解答 3.請問指標陣列是字串直接存入記憶體而不是陣列所有它是靠name指標指向字串起始位址嗎??所以name位址跟字串位址不連續的記憶體位址 "連續記憶體位址" char name[2][10]={"hello","world"}; & name[0][0] ~name[0][9] = 0022FF50 ~0022FF59 "hello" & name[1][0] ~name[1][9] = 0022FF5A0 ~0022FF63 "world" 它們記憶體位址都是連續,是因為把字串存放在陣列內?? "不連續記憶體位址" char *name[]={"hello","world"}; name = 0022FF70 //這兩個應該是指標指向"hello"的'h'位址00403000 name 1 = 0022FF74 //這兩個應該是指標指向"world"的'w'位址00403006 但是跟name位址的0022FF70接不上0022FF71..... 所以我想問的是'h'位址00403000是直接把字串存入記憶體再經由編譯器把字串'h'起始位址給陣列 name再去指向'h'位址嗎?? 謝謝
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-30 02:10:49 IP:211.22.xxx.xxx 未訂閱
問題又回到前面的討論點,記得指標也是個變數,只不過指標除了本身所在的記憶體位置外,指標的內容是指向記憶體的,因此name指向(也就是name指標變數的內容)hello的起始位址,而name 1(也就是第2個指標)是指向word字串的起始位置. ------------------- 學,然後知不足。
系統時間:2024-06-27 2:49:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!