由一个整形数组的重复赋初值出错而想到的数组初始化规则
2016-12-04 21:01
211 查看
一位同学我问了一下以下代码为什么会出错,一开始我也没想明白其代码无法编译的原因。
错误代码如下:
正确代码如下:
代码1想实现一个简单的替换,即:将已经赋初值为1,2,3,4的整形数组test经过change函数存放5,6,7,8;
当实际参数test传到函数change函数的形式参数test中时,形式参数和实际参数同时指向一块内存,即:存放了1,2,3,4的数组test所占的内存;
下面看看代码3
我们发现代码3会和代码1报同样的错误;
恍然大悟了一句话:
数组只能在数组定义的同时初始化!!!
错误代码如下:
代码1 #include<stdio.h> void change(int * test) { test[] = {5,6,7,8}; } int main() { int i; int test[] = {1,2,3,4}; change(test); for(i = 0; i < 4; i++) { printf("a[%d] = %d\n",i,a[i]); } return 0; }
正确代码如下:
代码2 #include<stdio.h> void change(int * test) { int i; for(i = 0; i < 4; i++) { test[i] = i + 5; } } int main() { int i; int test[] = {1,2,3,4}; change(test); for(i = 0; i < 4; i++) { printf("a[%d] = %d\n",i,a[i]); } return 0; }
代码1想实现一个简单的替换,即:将已经赋初值为1,2,3,4的整形数组test经过change函数存放5,6,7,8;
当实际参数test传到函数change函数的形式参数test中时,形式参数和实际参数同时指向一块内存,即:存放了1,2,3,4的数组test所占的内存;
下面看看代码3
代码3 #include<stdio.h> int main() { int i; int b[]; b[] = {1,2,3,4}; for(i=0;i<4;i++) { printf("%d ",b[i]); } printf("\n"); return 0; }
我们发现代码3会和代码1报同样的错误;
恍然大悟了一句话:
数组只能在数组定义的同时初始化!!!
相关文章推荐
- 在一个整形数组中去掉重复的数字
- 第十四周项目一数组大折腾(1)创建一个有20个元素的整型数组,通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入后10个元素的值,从前往后输出数组中元素的值,每五个元素
- 把一个整形数组中重复的数字去掉 - 微软面试题
- 开辟一个空房间,随机生成一个有30个数的整形数组,找出其中的重复数字,输出其余数字
- 请把一个整形数组中重复的数字去掉
- 第十四周项目一数组大折腾(3)创建一个长度为16的整形数组a并初始化,先输出数组中元素值为3的倍数的数,再输出所有下标为3的倍数的元素值
- 一个长度为N的整形数组,数组中每个元素的取值范围是[0,N-1],写一个算法判断数组中是否存在重复的数字
- (六)一个判断整形数组中是否有重复数字的简单算法
- 第十四周项目一数组大折腾(5)创建一个长度为16的整形数组a并初始化前15个元素,输入一个整数b,将b插入到a[0]位置(原有的数据往后“移动”)
- 请把一个整形数组中重复的数字去掉
- 第十四周项目一数组大折腾(4)创建一个长度为16的整形数组a并初始化,删除数组中所有能被3整除的元素(数组中实际有效使用的元素将不足16),输出删除后数组中的全部元素
- 第十四周项目一数组大折腾(2)创建一个长度为10的整形数组并初始化,由后往前(由第9个元素向第0个元素方向)输出数组中所有元素的值,改变数组元素的值,令所有的数组加倍,输出改变后的值。
- 166 请把一个整形数组中重复的数字去掉
- 把一个整形数组中重复的数字去掉 - 微软面试题
- 定义一个具有10 个整形元素的数组,随机生成1——100 之间的整数初始化数组元
- 把一个整形数组中重复的数 c892 字去掉
- 数组只能在初始化时整体赋初值。以后再赋值只能逐一改变了。
- 计数排序——有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 软件开发者面试百问-----有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 有一排好的数组,插入一个数,最大就放最后,否则按规律插入(不知道循环的道理)和出错