我想知道为什么以下程序的预期输出不是“hai”
#include<stdio.h>
#include<conio.h>
void first(char*);
void first(char *s)
{
printf("%u",s);
s="hai";
}
int main()
{
clrscr();
char *t ="welcome";
printf("%u",t);
first(t);
printf("%s",t);
getch();
return 0;
}
我得到的输出是Welcome而不是Hai。
如果有人可以详细解释,那会更有帮助吗?
答案 0 :(得分:1)
C中的所有内容都按值传递。包括指针。所以你已经将一个内存地址(指针)传递给函数,然后重新分配它以指向不同的内存位:指向你的&#34; hai&#34;串。原始指针t
仍然高兴地指向原始字符串&#34; welcome&#34;。
当您通过t
传递t
按值指向的内存地址时:该值已复制到参数/变量s
。