关于C语言数组指针的一个问题,高手进!

来源:百度知道 编辑:UC知道 时间:2024/09/19 15:40:19
#include <stdio.h>

void main()
{
char *s[ ]={"one", "two", "three"}, *p;
p=s[1];
printf("%c, %s\n", *(p+1), s[0]);}
觉得这段程序中,*s[]是个列指针,但是只是指针,并未分配内存空间。然而编译运行却正确。不明白,请高手指教!

楼主,你的理解有误
char *s[],表示:s是个数组,这个数组里存的是char型指针。

这样应该好理解些:

typedef char* cp;//cp 是char* 类型的

下面,用cp定义数组,定义数组的时候可以不指定长度,由后面的来确定这
里应该是s[3],是不!
cp s[] ={"one","two","three"}

这里如果明白了,那么分析你对内存分配
s 是个数组,局部变量,系统为其分配空间
"one","two","three",是字符串常量,main()函数运行前就在常量区分配好
了空间,注意是常量,不能改动,只能读取

char *s[] = {"one","two","three"};
也就是把常量区的字符串“one”的首地址赋值给s[0]
如果printf(%s,s[0]);将会看到one

如你题目中所示,以及上面的分析:
s[1]里面存的是常量区字符串“two”的首地址
p=s[1];//很明白
printf("%c, %s\n", *(p+1), s[0]);} //你不会有问题

如果你想:
*(p+1) = 'o';//试图把“two”中的‘w’,改为‘o’是会错的

char *s[]={"one", "two", "three"},
是在初始化时分配了空间

s 是指针数组
s[0] 指向了 "one"
s[1] 指向了 "two"
s[2] 指向了 "three"

s的每一项是