鱼C论坛

 找回密码
 立即注册
查看: 3620|回复: 13

字符数组的一个问题

[复制链接]
发表于 2013-3-30 13:35:36 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 Whisper微风 于 2013-4-1 13:35 编辑

为什么char c[10]={'l','i',' ',' ','c','h','u','a','n','g'};不会报错

char c[10];
c[10]={'l','i',' ',' ','c','h','u','a','n','g'};就会报错:error C2059: syntax error : '{'     error C2143: syntax error : missing ';' before '{'    error C2143: syntax error : missing ';' before '}'

实验了一下 int a[10]也是这个样子的 为什么 就不能像 int i;i=1;这样使用?/?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-30 13:35:37 | 显示全部楼层
#include<stdio.h>

int main()
{
        char c[10]={'l','i',' ',' ','c','h','u','a','n','g'};        //因为这是初始化 初始化是可以这样写的
        

        /*char b[10];
        b[10] ={'l','i',' ',' ','c','h','u','a','n','g'};        
        上面的语句意思是你要把整个字符集赋值给b[10] 这个元素 在b数组里面有b[10]这个元素吗?
         就算有 能装下这么多的字符吗? 如果数组你是先声明 然后赋值  赋值要么就是一个一个元素的赋值,
        要么就是用循环来给数组元素赋值*/
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-30 13:41:33 | 显示全部楼层
c[10]={'l','i',' ',' ','c','h','u','a','n','g'};是表示给元素c[10]赋值,而这个元素是字符型数据,怎么能赋值一个数组给他呢?写成这样:char c[10]={'l','i',' ',' ','c','h','u','a','n','g'};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-30 13:44:08 | 显示全部楼层
char c[10]={'l','i',' ',' ','c','h','u','a','n','g'};
这是声明和定义一起完成,所以不会报错。这是编译器解释过来的。

char c[10]; // 这是声明
c[10]={'l','i',' ',' ','c','h','u','a','n','g'};  //这是定义,实际意义表示只是给c数组的第10个元素赋值。
而给一个char类型能赋{'l','i',' ',' ','c','h','u','a','n','g'} 这样的一串值吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-30 13:47:25 | 显示全部楼层

你没弄懂 什么是声明 什么是定义就不要误导别人

char c[10]={'l','i',' ',' ','c','h','u','a','n','g'}; 就是一个定义 而且同时是一个声明
char c[10];同上 是一个定义 同时是一个声明
c[10]={'l','i',' ',' ','c','h','u','a','n','g'};  这个不是定义了 c[10]是对数组元素的使用 需要注意的是 这个已经是越界了 至于后面的那一段 初始化器 是不可以用在非定义的时候的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-30 15:45:28 | 显示全部楼层
我是师兄 发表于 2013-3-30 13:47
你没弄懂 什么是声明 什么是定义就不要误导别人

char c[10]={'l','i',' ',' ','c','h','u','a','n',' ...

:o只有请高人鉴定了, 什么是声明,什么是定义。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-30 15:57:16 | 显示全部楼层
zhangxw1113 发表于 2013-3-30 15:45
只有请高人鉴定了, 什么是声明,什么是定义。

你请吧 这里我不熟悉 不知道有哪些高人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2013-3-30 17:48:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-30 18:28:05 | 显示全部楼层
char c[10]编译器知道它是个数组,c[10]对编译来说是一个变量。与c[0]、c[1]等类似,c[10]被解释为c[9]后的下一个元素(实际越界了),既然这样肯定不能像你说的那样赋值了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-30 20:53:01 | 显示全部楼层
声明和定义,百度一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-1 08:48:41 From FishC Mobile | 显示全部楼层
str数组名是常量,只能在声名是定义,其他时候不能做左值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-2 14:26:13 | 显示全部楼层
什么是声明,什么是定义。上面已经有人解释了。。另外仅仅是声明编译器不会为声明分配内存,而定义会分配内存。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-7 01:10:09 | 显示全部楼层
说白了就是格式问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-7 16:18:45 | 显示全部楼层
前面的是初始化赋值,后面的是单个元素赋值,当然不一样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-15 01:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表