C語言的陣列

2021-07-14 10:57:36 字數 2110 閱讀 8229

1、int a;

不可以,要制定分配空間

2、scanf("%d",n);

int a[n];

不可以3、置零:int a[10] = ;

4、陣列名指標常量,儲存的是元素的首位址,元素首位址不可修改

1、int main()

for(i= 0; i < 5; i++)

}此程式沒有問題,因為p的值並沒有改變,當為p++時,才需要p = a;

此外,輸入時候scanf("%d",&p[i]);也可以

2、一維陣列:

int a[3];

printf("%p",a);

printf("%p",&a);

這兩個輸出的結果是一樣的

printf("%p",a);

printf("%p",&a+1);

但這兩個的結果不是一樣的,乙個加4乙個加12;

原因分析:

因為&a為陣列的位址,所以步長為12(即整個陣列的長度),a為陣列首元素的位址,步長為4;

舉例:#include

#define max_size 5

int main()

for(i = 0; i < 5; i++)

printf("\n");

return 0;

}其中:sizeof(p) = 4;

二維陣列的單位為一維陣列,所以二維陣列名為第乙個一維陣列的位址。

分析:*(*(a + i)+ j)

a+i : a為第乙個一維陣列的位址,a+i為第i個一維陣列的位址

*(a + i):第i個一維陣列首元素的位址

*(a + i)+ j:第i個一維陣列的第j個元素的位址

*(*(a + i)+ j):第i個一維陣列的第j個元素的值

*(&a):第乙個一維陣列的位址

**(&a)):第乙個一維陣列的首元素的位址

***(&a)):第乙個一維陣列的首元素的值

#include

int main()

,,;//三維陣列第乙個是二維陣列的個數,第二個和第三個為二維陣列的行列

}那麼:*(*(*(a + i)+ j)+ k):a + i為第i個二維陣列的位址,*(a + i)為為第i個二維陣列的第乙個一維陣列的位址,*(a + i)+ j為第i個二維陣列第j個一維陣列的位址,*(*(a + i)+ j)為第i個二維陣列第j個一維陣列的首元素的位址,*(*(*(a + i)+ j)+ k)為第i個二維陣列第j個一維陣列的第k個元素的值

#inlcude

void func(int a[5])

int main()

;printf("%d",sizeof(a));

}主函式的值為20,呼叫函式的值為4,因為當陣列名做函式形參時自動轉化為int *a;此時a的大小為指標的大小,這時a可以在呼叫函式中做自加運算,因為此時他已經是乙個指標變數。

#inlcude

void func(int **a)}}

int main()

;func(a); 

}不行,指標不相容

指標不相容的根本原因是步長不一樣,傳過去的實參a的步長為8,而形參的步長為4,

命令列傳引數

#include

int main(int argc, char *argv)

return 0;

}執行(linux環境):

[root@localhost 1226]# ./a.out  hello1 hello2 hello3

argc = 4

argv[1] = hello1

argv[2] = hello2

argv[3] = hello3

C語言的陣列

鑑於昨天偷懶,沒有及時的將知識點寫入自己的部落格,今兒只能一次性地寫兩個。不過也好,順帶的可以複習一下。1.概念 所謂的陣列,即為若干個資料型別相同的元素集合。2.定義 型別 名字 元素個數 3.訪問 a 0 a n 4.初始化 1.定義了陣列,若不初始化,則元素值為隨機值。2.若進行了部分初始化,...

C語言的陣列

定義陣列 int arr 3 定義陣列 arr 0 1 進行賦值 arr 1 2 arr 2 3 當定義陣列之後,arr就為乙個常量,代表陣列的位址,就是 arr 0 的位址 int arr 3 定義陣列 int b arr int c arr 0 printf b d n b printf c d...

c語言陣列

陣列 構造資料型別之一 陣列是具有一定順序關係的若干個變數的集合,組成陣列的各個變數稱為陣列的元素。陣列中各元素的資料型別要求相同,用陣列名和下標確定。陣列可以是一維的,也可以是多維的。在科學計算中,許多重要的應用都是基於陣列的。所謂一維陣列是指只有乙個下標的陣列。它在計算機的記憶體中是連續儲存的。...