作者kf185793 (嘿 你好)
看板C_and_CPP
標題Re: [問題] pointer to char位址的問題
時間Wed Dec 24 18:46:15 2014
不好意思,關於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