Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
两年前关闭。
为什么最后一行没有打印3而不是一些随机值
从另一个指针值中减去一个指针值,得到两个指针之间的“间隙”数,假设每个“间隙”的大小为a
下面的例子应该提供更多的见解使用
代码列表
样本运行
如果你还没有,我强烈建议你买/租/借一本普拉塔的“C Primer Plus”,并在最后完成章节和测验中的所有练习。这一主题在本书的开头部分有详细的论述。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
两年前关闭。
int main(){
float arr[5] = {12.5, 10.0, 13.5, 90.5, 0.5};
float *ptr1 = &arr[0];
float *ptr2 = ptr1 + 3;
printf("%f ", *ptr2); // outputs 90.5
printf("%d", ptr2 - ptr1); // outputs 3
printf("%d",ptr2) ;
return 0;
}
为什么最后一行没有打印3而不是一些随机值
最佳答案
这是c基本原理的一部分。ptr1
可以表示为ptr1 = &arr[0]
或ptr1 = arr
:这两种形式是等价的。此外,您的ptr2
赋值可以表示为ptr2 = ptr1 +3
或ptr2 = &ptr1[3]
。
有问题的一行:
printf("%d", ptr2 - ptr1);
从另一个指针值中减去一个指针值,得到两个指针之间的“间隙”数,假设每个“间隙”的大小为a
float
。下面的例子应该提供更多的见解使用
intptr_t
类型只是为了让我可以像操作简单的数字一样操作指针。代码列表
#include <stdio.h>
#include <stdint.h>
#define OFFSET (3)
int main(void)
{
float arr[5] = {12.5, 10.0, 13.5, 90.5, 0.5};
float *ptr1 = &arr[0];
float *ptr2 = ptr1 + OFFSET;
printf("%p %p\n", ptr1, ptr2);
printf("sizeof(float):%ld\n", sizeof(float));
printf("Distance between pointers (bytes):%ld\n", (intptr_t)ptr2 - (intptr_t)ptr1);
printf("Distance between pointers (gaps):%ld\n", ptr2 - ptr1);
return 0;
}
样本运行
0x7fffdc244800 0x7fffdc24480c
sizeof(float):4
Distance between pointers (bytes):12
Distance between pointers (gaps):3
如果你还没有,我强烈建议你买/租/借一本普拉塔的“C Primer Plus”,并在最后完成章节和测验中的所有练习。这一主题在本书的开头部分有详细的论述。
关于c - 为什么仅算术运算会打印出一个值,而不是正常的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46304060/
10-09 20:16