社区
C++ 语言
帖子详情
编译器是如何组织编译程序,让程序知道一个指针每一步的步长的?
wangzhihongji
2015-12-05 10:47:45
如题,如果我有一个指针,在32位系统上,大小为32bits,但是内存寻址也是32bits。也就是说,指针本身并没有指明自己每一步的长度,那么一个程序实例到底是怎么知道一个指针步长的?
...全文
73
2
打赏
收藏
编译器是如何组织编译程序,让程序知道一个指针每一步的步长的?
如题,如果我有一个指针,在32位系统上,大小为32bits,但是内存寻址也是32bits。也就是说,指针本身并没有指明自己每一步的长度,那么一个程序实例到底是怎么知道一个指针步长的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
paschen
版主
2015-12-06
打赏
举报
回复
程序使用的是虚拟内存,会被操作系统映射到页内存或物理内存,程序中不有关心这些
fefe82
2015-12-05
打赏
举报
回复
sizeof(*p)
指针
的
步长
及意义(C语言基础)
代码演示:(不同
编译器
下偏移值可能不同) 运行结果:总结:vs下常见
指针
的偏移值分别为: char *:1个字节 int *:4个字节 double *:8个字节 数组
指针
:偏移整个数组大小 结构体
指针
:偏移整个结构体大小代码演示: 运行结果:总结:不同类型
指针
解引用时取出数据的字节数不同 VS下常见
指针
类型解引用时取出的字节数分别为: char *:1个字节(通常需要强转)
指针
解引用时取出数据的字节数不同 VS下常见
指针
类型解引用时取出的字节数分别为: char *:1个字节(通常需要强转) int *
深入gcc
编译器
:C/C++代码如何变为可执行
程序
揭秘gcc
编译器
:C-C++代码如何变为可执行
程序
对
指针
的进阶认识
数组
指针
是
指针
。因为:字符
指针
:char * pc;pc是指向字符的
指针
(变量);整形
指针
: int * pint;pint是指向整形的
指针
(变量);浮点型
指针
: float * pf;pf是指向浮点型的
指针
(变量);那数组
指针
应该是:指向数组的
指针
。下面代码哪个是数组
指针
?p1——p1和[ ]先结合,说明p1是
一个
数组,有10个元素,每个元素的类型是int*,说明p1是存放
指针
的数组,所以是
指针
数组。
指针
,函数
指针
,二级
指针
,
指针
传参,回调函数,
指针
步长
在计算机科学中,
指针
(Pointer)是编程语言中的
一个
对象,利用地址,它的值直接指向(points to)存在电脑存储器中另
一个
地方的值。由于通过地址能找到所需的内存单元,可以说地址指向该内存单元。因此,将地址形象化的称为“
指针
”。意思是通过它能找到以它为地址的内存单元。这是官方对
指针
的定义,其实我们可以理解为:在内存中,内存被细分为
一个
个大小为
一个
字节的内存单元,每
一个
内存单元都有自己对应的地址。我们可以将这些内存单元形象地看成
一个
个的房间,将内存单元(房间)对应的地址形象地看成房间的门牌号。
《C语言
程序
设计》课程实验报告(四)-
指针
、结构体实验
数组在内存中只是数组元素的简单排列,没有开始和结束标志,在求数组的长度时不能使用sizeof(p) / 4,因为 p 只是
一个
指向 int 类型的
指针
,
编译器
并不
知道
它指向的到底是
一个
整数还是一系列整数(数组),所以 sizeof(p) 求得的是 p 这个
指针
变量本身所占用的字节数,而不是整个数组占用的字节数。调用 swap() 函数时,将变量 a、b 的地址分别赋值给 p1、p2,这样 *p1、*p2 代表的就是变量 a、b 本身,交换 *p1、*p2 的值也就是交换 a、b 的值。
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章