請問為什麼*p=c; *p="xo!!";printf("%s\n",c)還是原本的值呢??
p不是被我指向陣列c的記憶體位址了嗎?那為什麼我更改p為"xo!!"
C卻沒有改變呢??還有指標陣列*p[5] 裡面5如果超過5個元素會怎樣呢??好像不會怎樣,但是不宣告好像又不給我執行???
#include
#include
int main() {
char c[20]="programming";
char *p[5],*hot[10];
*p=c;
*p="xo!!";
printf("%s\n",c);
printf("%s\n",p[0]);
p[0]="oooo";
printf("%s\n",p[0]);
hot[0]=c;
printf("%s\n",&hot[0][0]);
printf("%s\n",p[0]);
printf("%s\n",c);
printf("%c\n",hot[0][2]);
printf("%s\n",&hot[0][2]);
printf("%s\n",hot[0] 2);
}
2007-02-19 04:10:50 · 2 個解答 · 發問者 finalholy 1 in 電腦與網際網路 ➔ 程式設計
好像要用指標才會改變
改變指標陣列內容 也只是陣列裡面的值更改
可是陣列的*p[5] 當指定內容超過5個元素到底會怎樣阿?
不會怎樣嗎?
2007-02-19 04:22:26 · update #1
請問為什麼
*p = c;
*p = "xo!!";
printf("%s\n", c) 還是原本的值呢??
你的 *p = c; 是把 p 指向 c 的位置
同樣地 *p = "xo!!"; 是把 p 指向"xo!!" 的位置
你改變的是 p 所指向的位置
並不是 p 的內容
c 當然不會改變
字串的內容不是用 "=" 所能改變的
必須用 memcpy, strcpy, strncpy, sprintf 等方式才能改變
char *p 是宣告 p 指向一個字元
當然不能指向一個字串
不過 char *p[5] 的用法在不同的編輯器底下
功能不盡相同
建議先試驗一下你的編輯器是如何運作之後再使用
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.
2007-02-20 00:00:01 · answer #1 · answered by JJ 7 · 0⤊ 0⤋
p不是被我指向陣列c的記憶體位址了嗎?
這不一定喔,所說的不一定是您不一定有指到陣列C起始的位址了
請在呼叫者函數以printf(%p,p);
然後在被呼叫者含數內也printf(%p,x);看看兩值是否相同
可是陣列的*p[5] 當指定內容超過5個元素到底會怎樣阿
會溢位.....運氣好不會怎樣(後面不遠有結束字元),實務上都是運氣不好的(字串變亂碼)
反正指標就是*和&不斷嘗試用看看,因為這真的很難三言兩語
說得清楚(可以寫成一本書了)
您要的不是觀念嗎??[起點]&[終點]是也,這就是我的認知了
您在不斷嚐試後相信也會有自己的認知的
知識 真不適合輸入有程式碼的內容........
2007-02-19 08:15:19 · answer #2 · answered by stlee 1 · 0⤊ 0⤋