打印字符串与&和out&

时间:2012-09-05 05:06:10

标签: c

  #include<stdio.h>

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

&amp; str + 2和str + 2之间的区别是str =&amp; str。请帮帮我。

感谢

8 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

&amp; str + 2给出了地址,但在printf语句中我们使用的是%s,因此它给输出一个垃圾值,对于str + 2,输出将是llworld

检查此链接以进行多次输出编译,看看我们得到的输出是什么

http://codepad.org/vODzmZj3

答案 3 :(得分:1)

如果没有其他内容,&str(以及&str+2)的printf说明符传递给%s的类型错误。它需要char *(指向char的指针),&str具有类型char (*)[25](指向25 char s的数组的指针)。将错误的类型传递给printf会调用未定义的行为。

此外,&str指向长度为1的数组(其元素是长度为25的char数组,并且只有其中一个),因此&str+2是 - of-bounds指针算术,因而是未定义的行为。

答案 4 :(得分:0)

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

str+2将打印lloworld,此处+2为增量值

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

这是唯一的区别。

此致 Nagaraj

答案 7 :(得分:-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;
}