数组a[]的数组名a和对数组名取地址&a的区别
程序员文章站
2022-04-11 18:54:37
...
二者区别
如:对于数组int a[10];
a: 数组名a是指数组首元素的地址(以数组中的一个元素大小为单位)
&a: 数组名取地址&a是指整个数组的首地址(以整个数组大小为单位)
#include <iostream>
using namespace std;
int main() {
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
printf("%p\n", a);
printf("%p\n", &a);
printf("%p\n", a + 1);
printf("%p\n", &a + 1);
}
可以看出:
a和&a是指的同一个地址,但是对他们的相同操作结果却不一样
a + 1加的是一个单位元素的大小,即加了4个字节(整型)
&a + 1加的是整个数组的大小,即加了40(4*10)个字节,即指向本数组结束后的下一个地址
注意:&a的类型既不是二级指针,也不是一级指针!
直接上题目
废话不多说,直接上两道笔试题!
题目一
#include <iostream>
using namespace std;
int main() {
int a[4]={1,2,3,4};
int *ptr=(int*)(&a+1); //一定注意强制类型转换!!!!不然编译出错!!因为&a是个特殊的类型!
printf("%d",*(ptr-1));
}
题目二
#include<iostream>
#include<vector>
using namespace std;
int main() {
char a[] = "hello,DAHUA";
char* ptr = (char*)(&a + 1);
printf("%c\n", *(ptr - 2));
}
第二道这里注意小陷阱:字符串最后一个是个空字符’\0’,所以结果是A而不是U
上一篇: 对数组名和数组地址的测试
下一篇: 简单认识一下JavaScript!