c语言指针和数组相关问题?

#include<stdio.h>
#include<string.h>
int main()
{
char * text[]=
{"string 1",
"string 2",
"string 3",
};
printf("通过数组名来获取首元素:%s\n",*text);

char *p=text;
printf("通过指针来获取首元素:%s\n",*p); //为什么没有打印出“string1”???

printf("text==%p\n",text);
printf("p==%p\n",p);
//text和p明明值一模一样

return 0;
}
想了好久,我的思路到底哪里错了?在printf()是是直接使用的p,并不是*p,因此应该不涉及取p地址上多少个字节的关系吧?

错误的原因在于:你在使用指针 p 时,没有对它取值。在这段代码中,p 指向了 text 数组的首地址,但它并不指向 text 数组的第一个字符串的首地址,因此直接输出 p 是无法得到预期结果的。
要想输出第一个字符串,可以这样写:
printf("通过指针来获取首元素:%s\n",*p);
另外,你可以发现,在输出 text 数组的时候,使用的是 *text,即通过数组名来获取首元素,而不是直接输出 text。这是因为,在 C 语言中,数组名本身就是一个指针,指向数组的首地址,取数组名的值就是取数组首元素的值。
下面是修改后的代码:
#include<stdio.h>
#include<string.h>
int main()
{
char * text[]=
{
"string 1",
"string 2",
"string 3",
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-05
char *p=text;
这一句语法错误,text的类型并不是char*,而是char*[]
正确的是char * p = text[0];本回答被提问者采纳
第2个回答  2022-12-05
第一组函数的名字以str开头;第二组函数的名字以mem开头。只有函数memmove对重叠对象间的拷贝进行了定义,而其他函数都未定义。比较类函数将其变量视为unsigned char类型的数组。本回答被网友采纳
相似回答