【发布时间】:2018-01-18 15:07:10
【问题描述】:
我正在学习 C 中的指针,并在 GCC 编译器中尝试了这个程序。
当我尝试p-q 时,它给出 1 作为输出(因为 int 需要 4 个字节,p 和 q 的值分别为 2358844 和 2358840,因此 1 作为输出,因为 p-q 提供 4 之后的 1*4=4 个字节) .
但是一旦我尝试q-p,它就会给出 4294967295 作为输出。它应该给出 -1 作为输出,但我无法理解它为什么给出另一个输出。
这是我的程序。
#include<stdio.h>
#include<conio.h>
void main()
{
int a=5,b=6;
int *p,*q;
p=&a;
q=&b;
printf("p = %u",p);
printf("\nq = %u",q);
printf("\nq-p = %u",q-p);
getch();
}
【问题讨论】:
-
从技术上讲,您的程序表现出未定义的行为。您应该使用
"%p"格式来打印指针。 -
此外,您只能减去指向同一数组元素的指针。 p 和 q 没有,所以 q - p 也是未定义的。
-
%p 给了 F 16 次。我改用 %d。
-
有点相关:stackoverflow.com/q/7954439/5265292 在那里,您可以了解有关指针测试的正确类型和格式字符串的一些知识...严格来说,结果可能仍然是未定义的行为,因为您的两个 int 不是一部分相同的数组(但我不是 100% 确定)
-
@vivekbhardwaj 谁或什么文字建议使用
"%u"打印指针?