这是面试中要求我的代码段,请向我解释&的用途。
#include<stdio.h>
int main()
{
char *str="INCLUDEHELP";
printf("%s",*&*str);
}
答案 0 :(得分:2)
&*str
是一个空操作。 &*&*&*&*&*&*&*&*&*str
(或类似&*
或任意数量的str
)仅等于char *str="INCLUDEHELP";
printf("%s", *str);
。参见C11 note102。我们可以忽略它。
%s
此带有%s
的代码无效。 char
期望零终止的*str
数组。 char
是一个'I'
,其值为'I'
,一个字符。类似Linux的系统上的程序很可能会收到分段错误信号,因为char *str="INCLUDEHELP";
printf("%c", *str);
将是零终止字符数组的无效地址。
如果是:
#include<stdio.h>
int main()
{
char *str="INCLUDEHELP";
printf("%c",*&*str);
}
或:
I
,则程序将在其stdout
上打印单个字符def function(string):
...
function('ad32js$%129')
function('11ad982')
。
答案 1 :(得分:0)
输出很可能是段错误,因为它是未定义的行为。正确的意思是&*...
。解除对指针的引用,获取被解除引用的char的地址,然后再次对该地址进行解除引用,将char而不是指针传递给printf。