user-0 提问: 【请问一个数组指针的问题】大侠请进

回复:
user: user-1
content: 引用 13 楼 zhao4zhong1 的回复:要么忍，要么滚。这个屌

user: user-2
content: 引用 12 楼 zxh707wk 的回复:[quote=引用 8 楼 zhao4zhong1 的回复:] [quote=引用 7 楼 wangjun403 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);又比如cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。 不懂汇编怎么办[/quote] 学[/quote]不学怎么办[/quote] 要么忍，要么滚。

user: user-2
content: 引用 7 楼 wangjun403 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] 不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);又比如cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。 不懂汇编怎么办[/quote] 学

user: user-1
content: 引用 8 楼 zhao4zhong1 的回复:[quote=引用 7 楼 wangjun403 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);又比如cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。 不懂汇编怎么办[/quote] 学[/quote]不学怎么办

user: user-1
content: 引用 8 楼 zhao4zhong1 的回复:[quote=引用 7 楼 wangjun403 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);又比如cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。 不懂汇编怎么办[/quote] 学[/quote]不学怎么办

user: user-3
content: 引用 5 楼 zhao4zhong1 的回复:不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);又比如cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。 不懂汇编怎么办

user: user-4
content: 在int a[4]={1,2,3,4};这个定义中：  a 是数组名，也是数组的首地址；  &a是数组首地址的地址，这样理解，a为一个指针，而&a是a这个指针的指针。  有点绕，但是可以通过这个例子来理解：  a[0] = 1;  *a = 1;  *(*(&a)) = 1;

user: user-5
content: 应该用 == 表示等价

user: user-5
content: *a =a[0]; *&a=a; 这么理解就可以了

user: user-2
content: 不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);又比如cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。

user: user-6
content: 引用 3 楼 user-7 的回复:[quote=引用 1 楼 zjq9931 的回复:] [quote=引用 楼主 daida2008 的回复:]  int a[4]={1,2,3,4}; cout<<a<<" "<<&a<<endl; //两个输出是相等的！！ cout<<*a<<" "<<*(&a)<<endl; //这两个输出是不等的！！ 数组名代表数组的首地址，那么&a返回的也是数组的地址，既然都是数组的地址那么对这个地址进行解引用就应该是第一个元素的值，为什么不是呢？ 这样就相等了  	int a[4]={1,2,3,4}; 	cout<<a<<" "<<&a<<endl; //两个输出是相等的！！ 	cout<<*a<<" "<<*(*(&a))<<endl; //这两个输出是不等的！！  a是数组名，可以代表数组的首地址，但他不是数组的首地址，a是一个变量，不是一个地址。如果是地址，那么它就无法&a。 [/quote] a并非变量，不能对其进行++或--操作。如果是变量，就能够&a[/quote] 确实，我的说法有误。

user: user-7
content: 引用 1 楼 zjq9931 的回复:[quote=引用 楼主 daida2008 的回复:]  int a[4]={1,2,3,4}; cout<<a<<" "<<&a<<endl; //两个输出是相等的！！ cout<<*a<<" "<<*(&a)<<endl; //这两个输出是不等的！！ 数组名代表数组的首地址，那么&a返回的也是数组的地址，既然都是数组的地址那么对这个地址进行解引用就应该是第一个元素的值，为什么不是呢？ 这样就相等了  	int a[4]={1,2,3,4}; 	cout<<a<<" "<<&a<<endl; //两个输出是相等的！！ 	cout<<*a<<" "<<*(*(&a))<<endl; //这两个输出是不等的！！  a是数组名，可以代表数组的首地址，但他不是数组的首地址，a是一个变量，不是一个地址。如果是地址，那么它就无法&a。 [/quote] a并非变量，不能对其进行++或--操作。如果是变量，就能够&a

user: user-7
content: 数组名仅仅是相当于指针，它并不是真正意义的指针，而是一个const的数，它的值等于指针的值 其实a和 &a结果都是数组的首地址，但他们的类型是不一样。 a表示&a[0],也即对数组首元素取地址，a+1表示首地址+sizeof(元素类型)。 &a虽然值为数组首元素地址，但类型为：类型 (*)[数组元素个数],所以&a+1大小为：首地址+sizeof(a)。

user: user-6
content: 引用 楼主 daida2008 的回复: int a[4]={1,2,3,4}; cout<<a<<" "<<&a<<endl; //两个输出是相等的！！ cout<<*a<<" "<<*(&a)<<endl; //这两个输出是不等的！！ 数组名代表数组的首地址，那么&a返回的也是数组的地址，既然都是数组的地址那么对这个地址进行解引用就应该是第一个元素的值，为什么不是呢？ 这样就相等了  	int a[4]={1,2,3,4}; 	cout<<a<<" "<<&a<<endl; //两个输出是相等的！！ 	cout<<*a<<" "<<*(*(&a))<<endl; //这两个输出是不等的！！  a是数组名，可以代表数组的首地址，但他不是数组的首地址，a是一个变量，不是一个地址。如果是地址，那么它就无法&a。