2012軟考程序員輔導:C語言數(shù)組注意問題

字號:

int a[10];
    數(shù)組名是常量不能為左值(如:a = 5;)
    不要認為數(shù)組元素a[i]代表數(shù)組元素的值,它代表數(shù)組元素本身,可作為左值使用。
    為指針進行初始化的字符串是只讀的
    (如:char *p = “hello”; strcpy(p, “world”);這樣寫是錯的)
    為數(shù)組進行初始化的字符串是可寫的
    (如:char str[10] = “hello”;strcpy(str, “world”);這樣寫是對的)
    注意:
    一直以為a代表數(shù)組的首地址,可以像指針一樣進行a++等操作,但是,數(shù)組名代表數(shù)組首地址,一定是個常量!
    所以不能對數(shù)組名進行 a++ 或者是 a-- 的操作,因為常量不能被修改。
    但如果定義指向數(shù)組的指針 *p=a;
    那么這個指向該數(shù)組的指針是可以進行 p++ 或者是 p-- 操作的,指針可以通過這種方式來獲取元素。
    數(shù)組名 a 除了代表數(shù)組的首地址外,它還代表特定的類型,在此例中 a 代表了int[10] 這個類型。
    在編譯環(huán)境內(nèi)運行 prinrf(“%d %d)”,sizeof(a),sizeof(p)); 得到了40 4 。
    得到這個結果的原因就是數(shù)組名 a 代表了它所定義的數(shù)組類型int[10],此類型占了10個int型大小的內(nèi)存,因此是長度是40。
    而指針存放的就是某個地址值,不論它指向的是什么類型的地址,都占有固定的4個字節(jié)大小。
    直接訪問 —— 用變量名訪問。
    間接訪問 —— 用地址、指針訪問。
    間接訪問: *(首地址 + 偏移) 偏移=下標值 * sizeof(數(shù)組元素類型)
    ? 通過數(shù)組下標訪問數(shù)組元素也是間接訪問。
    a[ i ] <==> *(a + i* sizeof(數(shù)組元素類型)) (每次偏移一個數(shù)組元素類型大小的字節(jié)數(shù))
    查看動態(tài)數(shù)組的大?。?BR>    (注意頭文件:#include
    int *p = (int *)malloc(sizeof(int)*10);
    printf(“%d ”,_msize(p)) ;
    輸出結果是40。
    訪問靜態(tài)數(shù)組元素最靈活的方法:
    int a[] = {0,1,2,3,4,5};
    int i;
    for( i = 0; i<(sizeof(a)/sizeof(a[0])); ++i);
    {
    ……
    ……
    }
    注意:sizeof(a)/sizeof(a[0])在編譯階段就已經(jīng)由編譯器以常量形式給出,不必擔心每次循環(huán)都需要計算。