不好意思,关于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)
: 如果有任何观念错误烦请不吝纠正
: 谢谢