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

来源:互联网 发布:js canvas 画图 编辑:程序博客网 时间:2024/04/19 12:20

一位同学我问了一下以下代码为什么会出错,一开始我也没想明白其代码无法编译的原因。
错误代码如下:

代码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报同样的错误;
恍然大悟了一句话:
数组只能在数组定义的同时初始化!!!

0 0