int arry[3] = { 1,2,3 };
int * p = &arry[3];
for (int i = 0; i < 3; i++) {
p[i] = i + 1;
cout << p[i] << endl;
}
为什么p[i] 为啥等同于arry[i]
指针后面加[i]效果就是相当于数组。不过,运行这段程序会得到一个内存存取越界的结果。因为指针p指向arry[2],而后面的循环相当于存取了arry[5],越界了!如果是 int * p = &arry[0]; 就没有问题。
你这个程序写的有点问题吧?猜测你是想通过指针p实现对数组arry的每一个元素加1操作并输出。
但是你这里的指针p却指向了一个空?
数组的实质其实就是地址的连接,第一个地址指向arry[0]所代表的数值,就是1;以此类推
int *p是一个指针变量,通过取地址符'&'可以获得arry数组元素对应的地址,那么p就成了这个地址,
所以当你改变p指针所代表的地址指向的值时,arry数组的值也跟着改变了
特别说明的是:数组名字本身就是数组的首元素所代表的地址
第四行后面那个分号忘记打了。。。
我的疑问是,为什么指针p[i] 为啥等同于数组arry[i]
数组的本质是地址啊,指针指向了那个地址,p[i]不就等于了arry[i]吗?p[i]的地址值和arry[i]的地址值相同,那指向的值不就一样了吗?这很难理解吗????