C语言的数组名传递到子函数后,子函数的形参接收到的是数组的起始地址,不能把数组的长度传递给子函数

void print(int a[]) { //a:0x61fe00
    int i;
    // 指针的大小是8个字节(64位)
    for (i=0;i<sizeof (a)/sizeof(int);i++)
    {
        // 所以只打印了a[0],a[1]
        printf("%d\n",a[i]);
    }
}

正确写法

void print1(int a[],int len) {
    int i;
    for (i=0;i<len;i++)
    {
        printf("%d\n",a[i]);
    }
}

打印看看

int main() {
    int a[6]={1,2,3,4,5,6};
    print(a);
    print1(a,6);
    return 0;
}

输出结果

print(a):

1
2
因为sizeof(a)/sizeof(int)中的a接收到的是数组的起始地址,也就是指针。
8个字节,所以只输出了a[0],a[1]

print1(a,6):

1
2
3
4
5
6

标签: 数组, C

添加新评论