int *ptr=(int *)(&a+1)问题的探讨
来源:互联网 发布:基因大数据 编辑:程序博客网 时间:2024/05/16 08:38
int *ptr=(int *)(&a+1)问题的探讨
#include<stdio.h>
int main(void)
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr1 = (int*)(&a + 1); //&a指针指向的元素为整个数组,故加为sizeof(数组)
int *ptr2 = (int*)((int)a + 1); //a地址再加一个字节,直接地址值相加而不是指针
int *ptr3 = (int*)(a + 1); //a为数组首元素的地址,a+1为数组第二个元素的地址
printf("%x %x %x\n", ptr1[-1], *ptr2, *ptr3);
return 0;
}
1)地址 0-3 4-7 8-11 12-15 16-19 20-23
数值 1 2 3 4 5
&a指针指向的元素为整个数组,故加为sizeof(数组),故&a+1 就是地址为20的地方
*ptr1[-1]就是20-4=16这个地方,因为一个Int 占用4个地址。
2)(int*)((int)a + 1);表示:a地址再加一个字节,即地址为1,直接是地址值相加而不是指针。跟a+1不一样,而a+1的地址是4。所以*ptr2表示的是指向地址为1的指针地址。
3)(int*)(a + 1);表示:a为数组首元素的地址,a+1为数组第二个元素的地址。所以*ptr3表示的是指向地址为4的指针地址。
#include<stdio.h>
int main(void)
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr1 = (int*)(&a + 1); //&a指针指向的元素为整个数组,故加为sizeof(数组)
int *ptr2 = (int*)((int)a + 1); //a地址再加一个字节,直接地址值相加而不是指针
int *ptr3 = (int*)(a + 1); //a为数组首元素的地址,a+1为数组第二个元素的地址
printf("%x %x %x\n", ptr1[-1], *ptr2, *ptr3);
return 0;
}
1)地址 0-3 4-7 8-11 12-15 16-19 20-23
数值 1 2 3 4 5
&a指针指向的元素为整个数组,故加为sizeof(数组),故&a+1 就是地址为20的地方
*ptr1[-1]就是20-4=16这个地方,因为一个Int 占用4个地址。
2)(int*)((int)a + 1);表示:a地址再加一个字节,即地址为1,直接是地址值相加而不是指针。跟a+1不一样,而a+1的地址是4。所以*ptr2表示的是指向地址为1的指针地址。
3)(int*)(a + 1);表示:a为数组首元素的地址,a+1为数组第二个元素的地址。所以*ptr3表示的是指向地址为4的指针地址。
阅读全文
0 0
- int *ptr=(int *)(&a+1)问题的探讨
- int *ptr=(int *)(&a+1)问题的探讨
- 关于int *ptr=(int *)(&a+1)问题的探讨
- int *ptr=(int *)(&a+1)问题的探讨
- int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 数组首元素地址和数组地址、int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- int *ptr=(int*)(&a+1);
- int *ptr=(int *)(&a+1)
- int *ptr=(int *)(&a+1)
- int *ptr=(int *)(&a+1)
- Hibernate 项目启动加载很慢,不联网时启动不了,还报异常Caused by: org.dom4j.DocumentException: www.hibernate.org Nested exc
- swoole 增加 展示 修改
- Ubuntu: Linux下查看本机显示器分辨率(xrandr)
- Python 类的多继承问题 [未解]
- 使用Chrome调试JavaScript的断点设置和调试技巧
- int *ptr=(int *)(&a+1)问题的探讨
- tcpdump
- Ignoring bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanC
- 浅谈c++继承、多态及继承与多态的区别
- [Errno 12] Timeout on http://mirrors.163.com/centos/7/os/x86_64/Packages/perl-Compress-Raw-Bzip2-2.0
- 决策树Decision tree
- activity跳转时的生命周期
- Python 3从入门到精通14-常见的数据类型字符串元组,列表,字典
- 简单了解分布式系统