因此,我读到C语言中不建议在指针上添加或减去小数位数,因为它不安全。因为指针可能超出地址范围,所以可以执行任意代码。谁能解释我,详细的定标整数是什么,它的目的是什么? 我找不到任何可信赖的消息来源,所以也许你们中有人可以帮助我。
来源网址:https://wiki.sei.cmu.edu/confluence/plugins/servlet/mobile?contentId=87152330#content/view/87152330
非常感谢。
答案 0 :(得分:0)
部分问题是,消息来源似乎在互换使用“缩放”和“转换”这两个术语。
从某种意义上讲,它们所指的缩放是仅在指针算术上下文中执行的缩放。例如:
int buffer[5];
int *pi = buffer;
pi += 2;
pi
最初指向的地址是一个字节或char
。但是,当添加2时,根据系统是32位还是64位系统,地址将增加8或16个字节。这是因为int
的大小为4或8个字节。因此,可以说所使用的实际值是可缩放的。
在源中使用术语“缩放”的另一种含义是指例如将size_t
值“按int缩放”,然后再次进行缩放。
这令人困惑,因为它的真正含义是将size_t
的值转换为int
(用于合法指针算法),然后在该算法的上下文中进行缩放。
对于指针算术来说这是一个问题,当然,转换是否会丢失信息。
要记住的关于指针算术的主要事情是始终确保您认为自己正在使用的值-实际上是您实际使用的值。