比较Char指针

Hes*_*aqi 0 c c++ pointers equality char

我想比较两个Char指针:

   char * x;
   char * y;

   x = "Hesham";
   y = "Hesham";

   printf("%d %d \n", &x, &y);

   if(x==y)
   {
     printf("=\n");
   }
   else
   {
     printf("!=\n");
   }
Run Code Online (Sandbox Code Playgroud)

执行结果是:

2293368 2293360
=
Run Code Online (Sandbox Code Playgroud)

1 - 为什么两个指针有不同的收件人,操作==返回true?

2 -为什么编译存储字符串没有文字Hesham只有一次,并使用其地址两次xy

Dav*_*nan 11

为什么两个指针的地址不同,操作==返回true?

&x并且&y是指针变量的地址而不是字符串的地址.由于xy是不同的变量,它们具有不同的地址.

然后比较值xy碰巧相同的值,因为编译器已注意到两个字符串文字具有相同的值,并且只存储了文字的单个副本.

为什么没有编译器存储字符串常量"Hesham"只有一次,并使用其地址两次xy

它做了.这就是为什么x == y评估为真.


另一个要点是%p在打印指针时应该使用格式说明符.