关于C语言中数组定义问题

代码如下

char a[],t[];

编译错误结果:

Main.c: In function ‘main’:
Main.c:10:10: error: array size missing in ‘a’
     char a[],t[];//定义原字符串和反转字符串
          ^
Main.c:10:14: error: array size missing in ‘t’
     char a[],t[];//定义原字符串和反转字符串
              ^
Main.c:10:14: warning: unused variable ‘t’ [-Wunused-variable]
Main.c:10:10: warning: unused variable ‘a’ [-Wunused-variable]
     char a[],t[];//定义原字符串和反转字符串
          ^

也就是说 error: array size missing 数组未定义大小 所以报错。 但是我记得之前 定义其他数组的时候未出现这个问题 所以就去试了一下int类型的定义

还是同样的错误

Main.c:10:9: error: array size missing in ‘a’

ok我意识到是我对概念把握不精准了 所以我重新看了一维数组数组定义和初始化的规范

数组的声明规范:
类型说明符 数组名[常量表达式];

eg. int a[5]


注:①命名与变量命名规范相同;
  ②需要定义个数;//这个是重点 也就是我错误的原因
  ③常量表达式中不能有变量,数组的大小不依赖于变量的值。


这时就有人想 初始化的时候 为什么能这样:
a[]={1,2,3,4};
这个是因为系统自己会读取里面的内容 是在初始化的时候就写的 所以其实效果是一样的 他的大小是4 只不过系统会识别给它初始化了。

数组定义初始化


1.定义但不初始化
int a[5];
char b[6];
int c[]; //这种是错误的!!!

2.初始化
①定义的时候就初始化参数列表
int a[10]={1,2,3};
int a[]={1,2,5};//考研的时候不建议这样写
char s[10]={'a','b'}
char v[5]="abcd";

②定义之后再初始化
用循环等方法 这里我找到了一个博主的总结 感觉很好https://blog.csdn.net/a26013/article/details/121767634
(1)memset函数初始化
在<string.h>头文件中的函数
void *memset(void *s, int c, unsigned long n);
//memset函数:将s指向的内存位置后面n个字节的存储空间替换为c 以字节为单位的替换 建议字符串的替换
(2)指定初始化器(可能很多局限)
int a[10]={[0 ... 9]=1};//全定义为1
int a[10]={[1]=1,[2]=2,[9]=9};//单独定义几个
(3)for循环 不赘述了

 

总结一下 就是在定义数组时 要把它的大小确定了 他需要在那时候就分配空间 以后空间是不变的了。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值