看板 C_and_CPP 關於我們 聯絡資訊
不好意思,關於C這些觀念 還沒有很了解透徹 讓小弟問幾個問題 int a[] = {1,2,3,4,5}; cout << *(*(&a+1)-1) << endl; // 5 int *p = (int*)(&a+1); cout << (*p-1) << endl; //未知 cout << *(*p-1) << endl; //不合法 cout << *(p-1) << endl; //5 是這樣嗎? cout << *(*(&a+1)-1) << endl; // 5 cout << *((int*)(&a+1)-1) << endl; // 5 以上兩式的差別是? 謝謝 ※ 引述《kdok123 (小天)》之銘言: : 首先例一: : int a[] = {1,2,3,4,5}; : cout << a << endl; //array a 的初始位址 : cout << *a << endl; // 1 : cout << *(a+1) << endl; // 2 : cout << *(*(&a+1)-1) << endl; // 5 : ////////////////以同樣的觀念來看char////////////// : char a[] = "123"; : cout << a << endl; // 123 ...式一 : cout << *a << endl; // 1 ...式2 : cout << *(a+1) << endl; // 2 ...式3 : cout << *(*(&a+1)-1) << endl; // 怪怪的值 .. 式4 : ///////////////以下為問題///////////////////////// : 從式2和式3可以知道a是一個pointer,但從式一和式四卻不能出現如同例一的效果 : 問題一:我要如何找到a[]的初始位址?(希望可以印出初始位置) : 問題二:如何實現我要的式4 (希望可以印出3) : 如果有任何觀念錯誤煩請不吝糾正 : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.71.106.47 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1419417978.A.FE7.html ※ 編輯: kf185793 (42.71.106.47), 12/24/2014 18:53:19
PkmX: 全部都不合法 你對&a做pointer arithmetic就已經超出標準了 12/24 19:35
PkmX: 阿 想了一下&a+1應該是合法的(但是只能+超過1) 12/24 20:12
PkmX: 但是這個指標是不能被dereference的 所以*(&a+1)是不合法的 12/24 20:13
PkmX: 但是不能+超過1 12/24 20:14
謝謝大大,可能小弟愚鈍 同一系列文的第二篇大大有講釋 cout << *(*(&a+1)-1) << endl; 輸出是5 差別是在?
Push5F: ( (char *)ptr) = char 12/25 02:14
Push5F: 更正 (char) ptr 12/25 02:14
謝大大...這是因為char本來就是一個pointer 所以才可以這樣? ※ 編輯: kf185793 (118.233.69.199), 12/25/2014 11:50:30