数组是“二等公民”的话题

本文探讨了数组在C语言中的特殊行为,包括为什么数组不能直接赋值、作为参数传递时的退化行为以及为何不能作为函数返回值等问题,并通过实例进行了解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组是“二等公民”

  • 数组不能直接赋值
  • 作为参数传递会退化为指针
  • 不能作为函数返回值

数组不能直接赋值

我们都知道,简单的变量类型,不如int 和 char ,是可以直接赋值的:

int a = 1;
int b = 2;
b =a;//赋值操作

但是如果是数组,int a[3] = {1,2,3}; int b[3] = {0}; 是无法操作a = b的。另外值得说明的是,放在结构体里面的数组是可以随着结构体赋值来进行赋值的:

#include <stdio.h>

struct Foo {
    int n;
    double d[2];
    char *p_c;
}foo1, foo2;

int main()
{
    char *c = (char *) malloc (4*sizeof(char));
    c[0] = 'a'; c[1] = 'b'; c[2] = 'c'; c[3] = '\0';

    foo1.n = 1;
    foo1.d[0] = 2; foo1.d[1] = 3;
    foo1.p_c = c;

    foo2 = foo1;     //assign foo1 to foo2

    printf("%d %lf %lf %s\n", foo2.n, foo2.d[0], foo2.d[1], foo2.p_c);

    return 0;
}
运行结果如下:
1 2.000000 3.000000 abc

以上的代码段中,有结构体的赋值操作 foo2 = foo1;,确实里面的数组也进行了赋值。

作为参数传递会退化为指针

这个很容易理解,当我们想把数组作为函数参数传递过去的时候,int a[2] = {1,2}; func(a);func的实现里面,形参还必须用指针来接收。我们知道,数组的两要素是,类型和个数,退化为指针也就是丢了个要素-个数。

不能作为函数返回值

函数是不能返回数组类型的,但是结构体却可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值