[ASM C/C++] C語言陣列

ABeen發表於2015-01-28

固定長度的陣列:

  可以具有任何的儲存類別。

長度可變的陣列:

  只能具有自動的生存週期(定義於語句塊內,眀沒有static修飾符)。

  名字必須為一般的識別符號,因此結構或聯合的成員不能是陣列的識別符號。

讀寫陣列資料可按索引和指標兩種方法。

 

#include <stdio.h>


int a[10];        //具有外部連結
static int b[10]; //具有靜態的生存週期和作用域


void parray(int count, int arr[])
{
    //索引訪問
    for(int i=0; i<count; i++)
    {
        printf("the %d is: %d \n", i, arr[i]);
    }

    //指標訪問
    for(int *p = arr; p < arr + count; ++p)
    {
        printf("p the value is: %d \n", *p);
    }
}


int  main(int argc, char *argv[])
{
    static int c[10]; //靜態生存週期和語句塊作用域
    //int d[10];      //具有自的生存週期和語句塊作用域

    int vla[2*argc];  //自動生存週期,長度可變的陣列
    //error: variable length array declaration can not have 'static' storage duration
    //static int e[n];  //精態生存週期,不能為長度可變陣列
    //error: fields must have a constant size: 'variable length array in structure' extension will never be supported
    //struct S { int f[n] }; //小標籤不能為長變可變陣列名
    struct S { int f[10]; }; //小標籤不能為長變可變陣列名
    //多維陣列
    extern int a2d[][5];
    //int a3d[2][2][3] = {{{110,111,112},{120,121,122}},{{210,211,212},{220,221,222}}};
    //int a3d[][2][3]  = {{{1},{4}},{{7,8}}};
    //int a3d[2][2][3] = {{1,0,0,4}, {7,8}};
    //int a3d[2][2][3] = {1, [0][1][0]=4, [1][0][0]=7,8};
    int a3d[2][2][3] = {{1}, [0][1]=4, [1][0]={7,8}};


    //初始化
    //int d[] = {1,2,3};
    //d[0] = 1, d[1]=2, d[2]=3;
    int d[10] = {1,2,3,[6]=6}; //初始化特定元素
    parray(10, d);
    
    return 1;
}                                                                                                                                                                        

 

相關文章