printf(“%s”,*&* str)的输出将是什么?指针在str的哪儿?

时间:2019-06-10 05:32:20

标签: c

这是面试中要求我的代码段,请向我解释的用途。

#include<stdio.h>
int main()
{
char *str="INCLUDEHELP";
printf("%s",*&*str);
}

2 个答案:

答案 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。