|
发表于 2013-7-24 09:11:33
|
显示全部楼层
18740579579 发表于 2013-7-23 23:31
还是不清楚。。。是不是这个意思。。。这是一个一维数组,数组元素为 每个字符串的第一个字符的 地址? ...
“还是不清楚。。。是不是这个意思。。。这是一个一维数组,数组元素为 每个字符串的第一个字符的 地址?”
是。
“那这个字符串的其余字符呢,是如何存储的“
其他字符串依然是在静态存储区。整个字符串都在静态存储区。
“而且通过观察可以发现,是一个二维数组保存着其余字符阿,那这个二维数组是从哪里来的????”
不管是一维指针数组还是直接二维数组去定义,都可以用二维数组的下标方式去访问单个元素。
其实在6楼我觉得说得蛮清楚了,再直接给你举例吧。
char *s1[2]={"abc","aaab"};
char s2[2][5]={"abc","aaab"};
包含上述两句的程序在加载到内存后,先统一给“abc","aaab"两个字符串分配空间,假设两字符串首地址分别为sadd1\sadd2,空间大小分别为4、5个字节。
程序运行后,运行到s1定义时候,分别给s1[0]\s1[1]分配两处内存空间(因该数组元素为char *型,即该处内存空间大小为表示地址所需的空间),分别存储sadd1\sadd2。数组名s1表示第一处空间的地址,存放着sadd1。
运行到s2定义时候,先给s2各数组元素分配2×5=10处内存空间,大小为表示字符的单字节,同时将静态存储区内的字符(包含'\0')复制到这10处空间,而静态存储区中字符总共就9个(3+4+2个'\0'),这里的处理方式是将s2的0行字符串后面补足'\0'。数组名s2即表示10处内存空间的首地址。 |
|