Re: [問題] pointer to char位址的問題

作者: kf185793 (嘿 你好)   2014-12-24 18:46:15
不好意思,關於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)
: 如果有任何觀念錯誤煩請不吝糾正
: 謝謝
作者: PkmX (阿貓)   2014-12-24 19:35:00
全部都不合法 你對&a做pointer arithmetic就已經超出標準了阿 想了一下&a+1應該是合法的(但是只能+超過1)但是這個指標是不能被dereference的 所以*(&a+1)是不合法的但是不能+超過1
作者: Push5F (帳號已賣)   2014-12-25 02:14:00
( (char *)ptr) = char更正 (char) ptr

Links booklink

Contact Us: admin [ a t ] ucptt.com