桃花飞舞 发表于 2015-8-21 15:46:51

这种数组声明并赋初值等价于什么?

#include <stdio.h>
int main(void)
{        char *s[ ]={"one","two","three"},*p;
        p=s;
        printf("%c,%s\n",*(p+1),s);
}
char *s[]={"one","two","tree"};
可不可以写成char s[ ]={"tone","two","three"};
可数组不是不能对二维进行省略么?

yjip267 发表于 2015-8-21 15:56:34

不可以, char *s[] ,里面的内容是字符串,而char s里面的内容是字符。

狼之道 发表于 2015-8-28 13:17:52

可以省略,不过是省略前面的数字:
char[]={{"tone","two","three"}};

yjip267 发表于 2015-8-28 17:12:24

狼之道 发表于 2015-8-28 13:17
可以省略,不过是省略前面的数字:
char[]={{"tone","two","three"}};

这样写应该不对吧。里面存的字符。你给是字符串。你在程序中试过吗?

狼之道 发表于 2015-8-29 12:59:21

yjip267 发表于 2015-8-28 17:12
这样写应该不对吧。里面存的字符。你给是字符串。你在程序中试过吗?

不好意思写错了,应该是char a[]={"tone","two","three"}

Delta 发表于 2015-8-29 13:54:52

本帖最后由 Delta 于 2015-8-29 13:56 编辑

可以省略的只是第一维长度,如char s[] = { "tone", "two", "three" }
字符串也是一种数组哦
#include <stdio.h>
int main(void)
{
        char s[] = { "tone", "two", "three" },*p;
        p = s;
        printf("%c,%s\n", *(p + 1), s);
}
再说了,定义指向数组的指针本来就是为了省空间,何必呢?:ton:

yjip267 发表于 2015-8-29 16:38:53

个人觉得还是不支持这 char s[] 这种定义。这样比较好一点char *s[ ];字符可以任意长度的。

桃花飞舞 发表于 2015-8-29 20:44:02

yjip267 发表于 2015-8-29 16:38
个人觉得还是不支持这 char s[] 这种定义。这样比较好一点char *s[ ];字符可以任意长度的。

就是说char *s[]和char s[]的作用都是定义一个二维字符数组。

yjip267 发表于 2015-8-30 11:22:07

可以这么说。

Ray-allen 发表于 2015-9-2 15:48:46

如果要省略的话也只能省略前面的那个,比如是s[];

阔怀 发表于 2015-9-19 21:50:59

{:1_1:}

东河 发表于 2015-9-21 15:40:24

看看

Dragon_Y 发表于 2015-9-24 18:49:18

第一个定义是指针数组,而第二个定义的是二维数组,两个不同的概念,有不同的规定

helehappy 发表于 2015-9-24 19:35:55

楼上正解

桃花飞舞 发表于 2015-9-24 19:47:46

Dragon_Y 发表于 2015-9-24 18:49
第一个定义是指针数组,而第二个定义的是二维数组,两个不同的概念,有不同的规定

我总是把指针数组与数组指针混淆不清!

Dragon_Y 发表于 2015-9-24 21:04:25

桃花飞舞 发表于 2015-9-24 19:47
我总是把指针数组与数组指针混淆不清!

指针数组是数组,其元素为指针,而数组指针是一个指针;很好区分的

千亩计者 发表于 2016-8-16 02:05:08

char *s=,=后面的内容是字符串

Damn_it 发表于 2016-9-13 13:05:26

冒个泡{:10_258:}

Damn_it 发表于 2016-11-23 18:27:19

不可以,二级指针指向指针数组,一级指针指向一维数组

图像识别专家 发表于 2016-11-23 20:39:25

二级指针浪费空间   就是这么理解
页: [1] 2
查看完整版本: 这种数组声明并赋初值等价于什么?