【摘自CSDN】
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int )a+1);
printf("%x,%x",ptr1[-1],*ptr2);
return 0;
}
第一个,&a 取得地址以后加一的操作,指针增加了sizeof(a)这么多的绝对地址。这应该是指针加了20,然后一个-1有减去了4,这样相当于指针的绝对地址加了16,指向的就是a[4]的首地址
第二个,加的是绝对内存地址,假如原来是0x0001,加完了以后是0x0002
然后再考虑pc的小端存储(little endian)
a 的内存存放
地址: 00 01 02 03 04 05 06 07
数据: 01 00 00 00 02 00 00 00
a = 00;
ptr2 = (int*)((int)a + 1);
ptr2 = 01;
所以ptr2指向的内存为
地址: 01 02 03 04
数据: 00 00 00 02
即*ptr2 = 0x2000000;
这是little-endian情况下。
如果是big-endian,结果不一样。
a 的内存存放
地址: 00 01 02 03 04 05 06 07
数据: 00 00 00 01 00 00 00 02
ptr2指向的内存为
地址: 01 02 03 04
数据: 00 00 01 00
*ptr2 = 0x100;
在我的机器LINUX上运行结果:
5,2000000
分享到:
相关推荐
c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针...
c语言中指针是较为重要的知识点,掌握指针你会更上一层楼。
C语言指针练习填空和阅读程序题,难度适中,便于考前复习。
C语言练习(指针)及答案,公司内部培训经典题目及答案
C语言循环、数组、函数及指针练习题精选及答案,习题经典,答案详细!
关于C语言指针练习题,进一步了解指针用法
c语言指针编程练习题.pdf
《c和指针》课后习题的答案
本文档主要是针对C语言的内存和指针部分的基础面试题,我们可以把内存想象为成一列很长很长的货运火车,有很多大小相同的车厢,而每个车厢正好相当于在内存中表示一个字节。这些车厢装着不同的货物,就像我们的内存...
指针题
C语言指针习题__附答案 C语言指针 均是常见面试题
c语言中 数组名和指针的区别 来自知网的论文
c语言的相关技术 c底层操作 指针 数组 函数 结构体
c和指针全套资料,c和指针非扫描版-源代码-课后习题答案
指针习题C语言.pdf
C语言习题集合指针C语言习题集合指针
课程思政-C语言程序设计-指针基础
C语言指针的强化练习,有选择题,程序题。例如指针的含义,指针的移动,指针的定义
对初学指针者有很好的帮助,希望大家努力学好C语言
深入的探讨了,指针和内存问题,很好的帮你解决指针和内存的各种疑惑