c語言中const修飾符

小鲨鱼2018發表於2024-11-13

c語言中const修飾符

001、不使用const修飾符

[root@PC1 test]# ls
test.c
[root@PC1 test]# cat test.c          ## 測試c程式
#include <stdio.h>
void print_array(int v[], int n);

int main(void)
{
        int ay1[] = {1,2,3,4,5};
        print_array(ay1,5);
        return 0;
}

void print_array(int v[], int n)
{
        v[1] = 1111;                // 在函式中修改傳入的形引數組的值, 可以修改
        int i;
        for(i = 0; i < n; i++)
        {
                printf("v[%d] = %d\n", i, v[i]);
        }
}
[root@PC1 test]# gcc test.c -o kkk         ## 編譯
[root@PC1 test]# ls
kkk  test.c
[root@PC1 test]# ./kkk
v[0] = 1
v[1] = 1111
v[2] = 3
v[3] = 4
v[4] = 5

002、使用const修飾符

[root@PC1 test]# ls
test.c
[root@PC1 test]# cat test.c          ## 測試c程式
#include <stdio.h>
void print_array(int v[], int n);

int main(void)
{
        int ay1[] = {1,2,3,4,5};
        print_array(ay1,5);
        return 0;
}

void print_array(const int v[], int n)         // 此處的陣列形參使用const修飾符
{
        v[1] = 1111;                          // 在函式內對資料的元素進行修改,報錯
        int i;
        for(i = 0; i < n; i++)
        {
                printf("v[%d] = %d\n", i, v[i]);
        }
}
[root@PC1 test]# gcc test.c -o kkk                   ## 編譯,報錯
test.c:11:6: error: conflicting types for ‘print_array’
 void print_array(const int v[], int n)
      ^
test.c:2:6: note: previous declaration of ‘print_array’ was here
 void print_array(int v[], int n);
      ^
test.c: In function ‘print_array’:
test.c:13:2: error: assignment of read-only location ‘*(v + 4u)’
  v[1] = 1111;
  ^

const修飾符的作用, 在函式的形引數組前使用const修飾符,保證在函式體中陣列的元素不能被修改。

相關文章