數組是“二等公民”
- 數組不能直接指派
- 作為參數傳遞會退化為指針
- 不能作為函數傳回值
數組不能直接指派
我們都知道,簡單的變量類型,不如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
的實作裡面,形參還必須用指針來接收。我們知道,數組的兩要素是,類型和個數,退化為指針也就是丢了個要素-個數。
不能作為函數傳回值
函數是不能傳回數組類型的,但是結構體卻可以。