数组指针和数组头指针
来源:互联网 发布:淘宝怎么删除评价链接 编辑:程序博客网 时间:2024/06/08 07:01
4. main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
答案:输出:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)
int *ptr=(int *)(&a+1);
则ptr实际是&(a[5]),也就是a+5
原因如下:
&a是数组指针,其类型为 int (*)[5];
而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。
a是长度为5的int数组指针,所以要加 5*sizeof(int)
所以ptr实际是a[5]
但是prt与(&a+1)类型是不一样的(这点很重要)
所以prt-1只会减去sizeof(int*)
a,&a的地址是一样的,但意思不一样
0 0
- 数组指针和数组头指针
- 数组指针和数组头指针
- 二重指针和数二维数组的匹配
- 指针,指针数组,数组指针
- 指针数组、数组指针
- 指针数组/数组指针
- 指针数组/数组指针
- 数组指针 指针数组
- 指针数组,数组指针
- 数组,指针,数组指针
- 数组,指针,数组指针
- 指针数组&数组指针
- 指针数组&数组指针
- 数组指针 指针数组
- 指针数组/数组指针
- 数组指针&指针数组
- 数组指针 指针数组
- 数组指针 指针数组
- 重载(overload)和重写(overried,…
- 位域
- 位域
- 宏定义
- 宏定义
- 数组指针和数组头指针
- USB-FS-Device-Driver分析
- 数组指针和数组头指针
- C/C++ 通用 Makefile
- C/C++ 通用 Makefile
- Linux用户模式和内核模式
- Linux用户模式和内核模式
- C语言异或操作的妙用
- C语言异或操作的妙用