#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。请帮帮我。
感谢
答案 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
检查此链接以进行多次输出编译,看看我们得到的输出是什么
答案 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;
}