0
  #include<stdio.h>

   int main()
   {
       char str[25] = "helloworld";
       printf("%s %s", &str+2,str+2);
       return 0;
   }

&str+2 和 str+2 这里的 str=&str 有什么区别。请帮我。

谢谢

4

8 回答 8

3

当你有一个数组时:str[xxx] str给你数组开头的内存地址,所以str+2会指向"lloworld". &str为您提供存储 str 的地址。所以通过打印 &str+2 你会有意想不到的行为。

于 2012-09-05T05:12:06.230 回答
2

&获取该变量的地址,而不是变量指向的值。但是,对于一个字符数组,该值将是该数组的开始(第一个插槽)。

&str+2获取内存位置str并添加2.

str+2获取开始的内存位置并添加 2 个字节(char= 1 个字节,查看指针算法)。

于 2012-09-05T05:08:17.637 回答
1

&str+2 最终给出了地址,但在 printf 语句中,我们使用 %s 所以它给输出一个垃圾值,对于 str+2,输出将是 llworld

检查此链接的输出编译几次,看看我们得到什么输出

http://codepad.org/vODzmZj3

于 2012-09-05T05:21:37.743 回答
1

如果没有别的,&str(因此&str+2)有错误的类型要传递给printf说明%s符。它需要char *(指向 的指针char),并且&str具有类型char (*)[25](指向 25char秒数组的指针)。将错误的类型传递给printf调用未定义的行为。

此外,&str指向一个长度为 1 的数组(它的元素是char长度为 25 的数组,并且只有一个),&str+2越界指针算术也是如此,因此是未定义的行为。

于 2012-09-05T05:53:49.523 回答
0

&str打印vailabel的地址,如'9'或十六进制'0x009'

str+2将打印lloworld,这里 +2 作为增量值

于 2012-09-05T05:11:31.040 回答
0

str + 2 是指向字符串第三个符号的指针,&str + 2 是指向字符串指针加 2 的指针

于 2012-09-05T05:22:02.383 回答
0

str 是指向字符的指针(数组中的第一个字符)。&str 是指向字符数组的指针。

当我们执行 str+2 操作时,增加了 2 个字节。(因为它本质上是一个 char 指针)。当我们执行 &str+2 操作时,增加了 22 个字节。(因为字符数组的长度为 11 个字节)。

这是唯一的区别。

问候, 纳加拉吉

于 2014-01-29T14:38:11.513 回答
-2

您可以尝试以下代码以供参考!

#include<stdio.h>
int main()
{      
    char str1[11] = "1111111111";
    char str2[11] = "2222222222";  
    char str[11]  = "helloworld";
    char str3[11] = "3333333333";
    char str4[11] = "4444444444";

   printf("%s %s\n", &str-2,str+2);
   return 0;
}
于 2012-09-05T06:36:45.867 回答