c语言中指钟问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 01:52:46
main()
{
char *s="Hello";
printf("%s\n",s);}
上面这个可以运行并正确输出了Hello
第三行定义s是个字符型指针变量,教程上给指针变量下的定义是"用来存放变量地址的变量"也就是说,除了 变量的地址 以外不能在放其他东西了吧.为什么这个 字符 常量 加到里面还能正确输出,是不是我理解的问题?
zhgwbzhd,字符串第一个字符的地址也就是字符'H'的地址,它还是个常量字符啊,不是变量,所以跟"用来存放变量地址的变量"有冲突.能说详细点么
test_abcd,是不是说指针变量的空间不光能存地址,还能存字符串..??

colagump:%s意思是输出一个或多个字符啊 我看不懂你写的那个暗示...printf("%x", s);是输出十六进制,是hello转成十六进制在输出?输出了194好象不对?printf是函数,应该是编写好以后放在跟c程序一起启动的函数库中,不过这个应该是很底层的函数吧
printf为什么叫printf而不叫print,是为了方便使用的人理解啊.C++我没用过.那个程式是不是想告诉我,指针变量的空间不光能存地址,还能存字符串,然后在逐个字符的输出?我理解能力不好~

注意那个%s

我已经给你暗示了, 没理解?

如果你写成这样printf("%x", s);
看能不能得到Hello

printf为什么叫printf而不叫print, 那个f是干什么的你想过没, printf也是函数, 也是人写的, 函数是完成某一特定功能的过程, 这里虽然s个是指针没错, 但你要求的是按%s也就是字符串的形式打出, 所以函数内部可能就会这样:

for(; *s != '\0'; ++s)
putchar(*s);

这和C++中:
char a = '1';
char *p = &a;
cout << p打出的是a的内容而不是a的地址是一个道理的, C++比C更智能化一点. 但需要知道的就是这其实是函数帮你完成的功能.

你理解有误,
字符常量和字符串常量是不一样的概念。
程序中用的是字符串常量,也就是把字符串第一个字符的地址给了指针变量。是没有任何问题的。

这是C的一个初始化的问题
这个字符串会自动存放在s中的地址开始的空间中
而printf("%s\n",s);也是从s中的地址开始输出,知道字符串的结尾

你说的问题实际上是C初始化自动解决的