c - 指针/地址差异

标签 c pointers pointer-arithmetic

<分区>

为什么两个地址的区别是错误的? http://codepad.org/NGDqFWjJ

#include<stdio.h>
int main()
{
   int i = 10, j = 20;
   int *p = &i;
   int *q = &j;
   int c = p - q;
   printf("%d\n", p);
   printf("%d\n", q);
   printf("%d", c);
   return 0;
}

输出:

-1083846364
-1083846368
1

最佳答案

首先,当对不相关的指针执行时,指针算术没有定义。

其次,它是有道理的。当减去指针时,您得到的是这些地址之间的元素数,而不是字节数。

如果你想尝试一下

char *p1 = &i, *p2 = &j;

你会得到不同的结果。


作为旁注,在打印指针时使用 %p

关于c - 指针/地址差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855482/

相关文章:

c - 二叉树 : user decides whether it should be a number tree or a word tree in c programming

c++ - 为什么 unique_ptr<T>(T*) 是显式的?

c - 在非结构或 union 中请求成员 `type'

c - 结构体/构造函数/指针 - C 编程语言

c - int *p=somearray 但 (p+1) 不等于 somearray[1] 的地址。为什么?

c - 显示用户输入的字符串的字符。 C语言

c - 远程调试的调试技术

c - 使用 C 以文本格式压缩流式字符数组的最快方法是什么?

c++ - C++11 中的空指针算法

c - 如何使用简单的指针算术访问结构体的属性?