您的位置:首页 > 其它

由一个整形数组的重复赋初值出错而想到的数组初始化规则

2016-12-04 21:01 211 查看
一位同学我问了一下以下代码为什么会出错,一开始我也没想明白其代码无法编译的原因。

错误代码如下:

代码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报同样的错误;

恍然大悟了一句话:

数组只能在数组定义的同时初始化!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐