【发布时间】:2013-05-16 17:19:31
【问题描述】:
我了解到 char *p 的意思是“指向 char 类型的指针”
而且我想我也知道 char 意味着阅读
该指针到达其目的地后的内存量。
最终,在
char *p = "hello World";
p 包含字符串的地址和
p 正指向它
问题。
如果 p 指向字符串,它不应该只读取 'h' 吗? 因为它只读取一个字符的大小?
为什么 `printf("%s", p) 打印整个字符串???我还在 Rithcie 的书中了解到,指针变量不具有数据类型。 真的吗???
【问题讨论】:
-
printf("%s", *p)是错误的。printf("%s", p)打印整个字符串,printf("%c", *p)打印第一个字符。 -
这确实是一个复杂的细节,你需要把它做好。在你走得更远之前,你需要学习一些教科书。但是声明中的
anything *表示“指向anything实体的指针”。所以char *表示“指向单个字符的指针”。 按照惯例,由于 C 没有“字符串”类型,char *的含义被重载为有时也意味着“指向相关字符序列中的第一个字符的指针,可能以零字节”。但这只是一个约定,它不是语言的一部分。 -
"char means to read ..."- 嗯?那是不对的。你的解释或理解都离你几步之遥。char除了成为char之外没有其他意义。而char*只不过是char的内存地址。没有"destination",除了“字符串”末尾的空终止符,但char对此一无所知。但是printf会循环并找到%s的空终止符。 -
好吧,我并不真正关心我写的语法错误,我只是在专注于我的观点时盲目地打字并犯了一个错误。我知道 printf 指的是地址类型。好吧,无论如何这也不是我的意思,仍然感谢您的回答,关于第二个问题,我不确定您是否 100% 正确。因为根据声明,假设指针具有数据类型 int* a,b;它分别声明 int *a & int b 我认为编译器不会将指针视为数据类型
标签: c