【C 語言入門】存取陣列外元素的問題


#include <stdio.h>

int main()
{
    int v[3] = {1,2,3};
    printf("%d\n", v[0]);
    printf("%d\n", v[2]);
    printf("%d\n", v[3/2]); //v[1]
    printf("%d\n", v[0.5]); //(X)編譯錯誤
    printf("%d\n", v[3/2.]); //(X)編譯錯誤

    return 0;
}

接下來舉另一個例子。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int max3(int[3]);

int main()
{
    int a[3]={3,9,7};
    printf("Max: %d\n",max3(a));
    int b[5]={3,2,1,9,7};
    printf("Max: %d\n",max3(b));
    return 0;
}

int max3(int v[3]){
    int max = v[0], i;
    for (i=1;i<3;i++){
        if(v[i]>max){
        max=v[i];
        }
    }
    return max;
}

陣列 a 的大小為 3,陣列 b 的大小為 5,陣列 b傳入大小為 3 的 max3 是 ok 的。

只是輸出結果:

Max: 9
Max: 3

b 的最大值雖然也是 9,但是由於 v 最多只能讀取到位置 3 的元素,而最大值在位置 5。

這支程式雖然執行上沒問題,但是輸出結果是錯的。

以下是比較正確的寫法:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int maxv(int[3], int N);

int main()
{
    int a[3]={3,9,7};
    printf("Max: %d\n",maxv(a,3));
    int b[5]={3,2,1,9,7};
    printf("Max: %d\n",maxv(b,5));
    return 0;
}

int maxv(int v[], int N){
    int max = v[0], i;
    for (i=1;i<N;i++){
        if(v[i]>max){
        max=v[i];
        }
    }
    return max;
}

Leave a Comment

Your email address will not be published. Required fields are marked *