一维数组的地址
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
//int *ptr1=(&a+1);
int *ptr=(int*)(&a+1);
//printf("%d\n",*(ptr1));
printf("%d\n",*(ptr));
printf("%d\n",*(ptr-1));
printf("%d %d\n",*(a+1),*(ptr-1));
}
输出:
此处注释掉的两行会报错,主要原因是一维数组的数组名取地址后,它就相当于变成了pStr[][5]
pStr[][5],可以理解为类似于下边的矩阵(点代表该处的数据是不确定的,但和编译器有关系,有些编译器在你使用这些点时,为其赋值为0,就比如我上边的输出,用的是dev_c编译器)
1 2 3 4 5
. . . . .
. . . . .
…
当pStr加一后,相当于当前的地址指向了第二行(此处12345为第一行)的第一个点,如上所说打印出来可能是一个不确定的值,也可能是一。
pStr加一后再减一,那他就指向了第一行的最后一个数,即为该地址存储的值为5。
报错信息如下:不能将int (*)[5],转换为 int *
上代码中为什么加了(int*)就不报错呢?是因为二维指针不能直接赋值给一维指针,所以需要用(int *)强转成一维指针。
此处忽略我为什么我的C代码写在Cpp文件里,hhh,问就是创建时懒的选文件类型。
以上为本人拙见,如有问题,希望大家多多指点!(手动狗头)