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