天天看點

數組是“二等公民”的話題數組是“二等公民”

數組是“二等公民”

  • 數組不能直接指派
  • 作為參數傳遞會退化為指針
  • 不能作為函數傳回值

數組不能直接指派

我們都知道,簡單的變量類型,不如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[];
    char *p_c;
}foo1, foo2;

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

    foo1.n = ;
    foo1.d[] = ; foo1.d[] = ;
    foo1.p_c = c;

    foo2 = foo1;     //assign foo1 to foo2

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

    return ;
}
運作結果如下:
   abc
           

以上的代碼段中,有結構體的指派操作

foo2 = foo1;

,确實裡面的數組也進行了指派。

作為參數傳遞會退化為指針

這個很容易了解,當我們想把數組作為函數參數傳遞過去的時候,

int a[2] = {1,2}; func(a);

func

的實作裡面,形參還必須用指針來接收。我們知道,數組的兩要素是,類型和個數,退化為指針也就是丢了個要素-個數。

不能作為函數傳回值

函數是不能傳回數組類型的,但是結構體卻可以。

繼續閱讀