代码如下
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循环 不赘述了
总结一下 就是在定义数组时 要把它的大小确定了 他需要在那时候就分配空间 以后空间是不变的了。