C语言中指针的比较

C语言中指针的比较,c,C,我有一个简单的问题,当我这样做的时候: int* ptr1 int* ptr2 if(ptr1 == ptr2)... 我究竟比较了什么: 1. addresses where ptr1 and ptr2 saved 2. addresses where content of pointers saved 如果有1,我如何检查2?您正在比较ptr1是否指向与ptr2相同的地址(并且是相反的)。这意味着,您的选项2将比较指针值(即地址) 因此,ptr1==ptr2测试两个指针是否指向同一地址

我有一个简单的问题,当我这样做的时候:

int* ptr1
int* ptr2

if(ptr1 == ptr2)...
我究竟比较了什么:

1. addresses where ptr1 and ptr2 saved
2. addresses where content of pointers saved

如果有1,我如何检查2?

您正在比较ptr1是否指向与ptr2相同的地址(并且是相反的)。这意味着,您的选项2将比较指针值(即地址)

因此,
ptr1==ptr2
测试两个指针是否指向同一地址——您的#2


您可以用
&ptr1==&ptr2
来表示#1——比较指针本身的地址,但这里您知道这将是错误的。

您比较实际指针

从你的措辞中,我不确定你到底想做什么,但这可能是:

if (*ptr1 == *ptr2) ...


要比较指针实际指向的对象,请使用:

if(*ptr1 == *ptr2)...
当你申报时

  int *ptr1;
您正在定义一个指向整数的变量(具有地址)。您可以通过获取该变量的地址(&)来获取该变量的地址,即

&ptr1
基本上,ptr1将包含一个内存位置的地址(如果整数指向一个已经为这样的事情分配了空间的位置,则可以存储在该位置)


比较ptr1和ptr2变量的值将告诉您它们是否指向同一个变量;比较ptr1和ptr2变量的解引用值将告诉您它们所指向的值是否相同。

2)指针的值以及它们指向的地址。

要比较指针指向的值:

  • 检查是否有任何指针为空
  • 找出两个指针都为NULL在上下文中的含义
  • if(*ptr1==*ptr2)
  • 要比较存储指针的地址,请使用:

    if ( &ptr1 == &ptr2 ) since these are the addresses of the pointers.
    

    任何时候你使用have的形式是“a==b”,你是在比较变量a的内容和变量b的内容。在a和b是指针的情况下,它们的内容是某些数据的地址,因此如果它们指向相同的位置,a==b将返回true,否则返回false


    要比较两个变量的地址,需要执行&a==&b.

    第一种情况是比较它们所指向的值。你的第二个案例比较了他们的地址,结果总是错误的。一个好的编译器会在编译时对其进行优化。两个变量永远不会有相同的地址。是的,谢谢,我知道指针是如何工作的。我发现原来的问题措辞有点含糊不清,但我同意我的回答也有点含糊不清。OP可能想做我上面的第一个案例。我认为OP想做
    if(ptr1==ptr2)
    即检查它们是否指向相同的东西。
    if ( &ptr1 == &ptr2 ) since these are the addresses of the pointers.