數(shù)組
1、二維數(shù)組在物理上以及邏輯上的數(shù)組維度
二維數(shù)組在邏輯上是二維的,在物理上是一維的
2、數(shù)組名作為類型、地址、對(duì)數(shù)組名取地址的區(qū)別
數(shù)組名作為類型:代表的是整個(gè)數(shù)組的大小
數(shù)組名作為地址:代表的是數(shù)組首元素的地址
對(duì)數(shù)組名取地址:代表的是數(shù)組的首地址
3、描述一維數(shù)組的不初始化、部分初始化、完全初始化的不同點(diǎn)
不初始化:如果是局部數(shù)組 數(shù)組元素的內(nèi)容隨機(jī) 如果是全局?jǐn)?shù)組,數(shù)組的元素內(nèi)容為0
部分初始化:未被初始化的部分自動(dòng)補(bǔ)0
完全初始化:如果一個(gè)數(shù)組全部初始化 可以省略元素的個(gè)數(shù) 數(shù)組的大小由初始化的個(gè)數(shù)確定
4、數(shù)組的分類
數(shù)組的分類主要是:靜態(tài)數(shù)組、動(dòng)態(tài)數(shù)組兩類。
靜態(tài)數(shù)組:例如int arr[5];在程序運(yùn)行前就確定了數(shù)組的大小,運(yùn)行過程不能更改數(shù)組的大小。
動(dòng)態(tài)數(shù)組:主要是在堆區(qū)申請(qǐng)的空間,數(shù)組的大小是在程序運(yùn)行過程中確定,可以更改數(shù)組的大小。
5、數(shù)組的特點(diǎn)
同一個(gè)數(shù)組所有的成員都是相同的數(shù)據(jù)類型,同時(shí)所有的成員在內(nèi)存中的地址是連續(xù)的
6、對(duì)數(shù)值數(shù)組操作的時(shí)候需要注意啥
對(duì)任意數(shù)值數(shù)組操作的時(shí)候必須逐個(gè)元素操作
7、數(shù)組按維度分類
分為一維數(shù)組、二維數(shù)組、多維數(shù)組
8、如果數(shù)組元素不初始化
如果是全局?jǐn)?shù)組:不初始化元素內(nèi)容為0
如果是局部數(shù)組:不初始化元素內(nèi)容不確定(隨機(jī)值)
9、如何通過數(shù)組名訪問數(shù)組元素
數(shù)組名+[數(shù)組元素的有效下標(biāo)]
10、如果有數(shù)組int arr[5]那么sizeof(arr)的結(jié)果
20字節(jié)
11、如果有數(shù)組int arr[5]那么sizeof(arr[0])的結(jié)果
4字節(jié)
12、如果有數(shù)組int arr[5]那么sizeof(arr)/sizeof(arr[0])的結(jié)果
5
13、如果有數(shù)組int arr[5]={[2]=10, [4]=30};則該數(shù)組每個(gè)元素的值
0 0 10 0 30
14、如果有二維數(shù)組int arr[3][4];則sizeof(arr)的結(jié)果
48字節(jié)
15、如果有二維數(shù)組int arr[3][4];則sizeof(arr[0])的結(jié)果
16字節(jié)
16、如果有二維數(shù)組int arr[3][4];則sizeof(arr[0][0])的結(jié)果
4字節(jié)
17、如果有二維數(shù)組int arr[3][4];則sizeof(arr)/sizeof(arr[0])的結(jié)果
3
18、如果有二維數(shù)組int arr[3][4];則sizeof(arr[0])/sizeof(arr[0][0])的結(jié)果
4
19、如果有二維數(shù)組int arr[3][4];則sizeof(arr)/sizeof(arr[0][0])的結(jié)果
12
20、二維數(shù)組初始化的方式有幾種
分段初始化(部分初始化,全部初始化)
連續(xù)初始化(部分初始化,全部初始化)
21、如果有兩個(gè)二維數(shù)組int arr1[3][4]={ {1,2}, {5,6}, {9,10,11} }; int arr2[3][4]={ 1,2, 5,6, 9,10,11}; 則arr1[1][2] +arr2[1][2]運(yùn)行結(jié)果:
11
22、談?wù)刢har arr1[]={'h','e','l','l','o'}; 和char arr2[]="hello"; 兩個(gè)數(shù)組的區(qū)別
字符數(shù)組arr1逐個(gè)元素初始化,系統(tǒng)不會(huì)加'\0'字符串結(jié)束符,所以arr1的大小為5字節(jié)
字符數(shù)組arr2是以字符串方式初始化,系統(tǒng)會(huì)自動(dòng)在字符串末尾加'\0',所以arr2的大小為6字節(jié)
23、談?wù)勛址麛?shù)組的元素遍歷方式
可以逐個(gè)元素使用%c數(shù)組
可以使用%s輸出整個(gè)字符數(shù)組(需要注意:%s遇到‘\0’結(jié)束)
24、談?wù)刧ets和fgets給字符數(shù)組獲取字符串時(shí)的不同點(diǎn)
gets獲取字符串的時(shí)候不會(huì)對(duì)獲取的長(zhǎng)度做出判斷,容易造成字符數(shù)組越界
fgets獲取字符串的時(shí)候會(huì)對(duì)獲取的長(zhǎng)度做出判斷,不會(huì)造成字符串越界
fgets相較于gets更安全
25、不使用strlen函數(shù)完成字符串長(zhǎng)度測(cè)量
注意主函數(shù)記得調(diào)用test03();
26、有兩個(gè)字符數(shù)組str1 str2, str1獲取鍵盤輸入,將str1的字符串拷貝到 str2中(不允許使用strcpy)
注意主函數(shù)記得調(diào)用test03();
27、有以下兩個(gè)數(shù)組str1,str2 將str2的字符串 追加到 str1的尾部
注意主函數(shù)記得調(diào)用test04();
28、從字符串中 查找某個(gè)元素(第一次出現(xiàn)的下標(biāo))
29、鍵盤輸入第一個(gè)字符串str1,輸入第二個(gè)字符串str2,再輸入位置pos,要求將str2字符串插入到字符串str1的pos位置
C
void test06() {
char str1[128]="";
printf("親輸入一個(gè)字符串:");
fgets(str1,sizeof(str1),stdin);
str1[strlen(str1)-1]=0;
char str2[128]="";
printf("親輸入第二個(gè)字符串:");
fgets(str2,sizeof(str2),stdin);
str2[strlen(str2)-1]=0;
int pos=0;
printf("請(qǐng)輸入要插入的位置:");
scanf("%d", &pos);
//計(jì)算str2的長(zhǎng)度
int len = 0;
while(str2[len] && ++len);
//將i定位到str1的尾部 i也是str1的長(zhǎng)度
int i=0; while(str1[i] && ++i);
//判斷pos位置是否 合法
if(pos<0 || pos>i) {
printf("下標(biāo)%d不無效\n", pos);
return;//結(jié)束函數(shù)
}
//數(shù)據(jù)是否溢出
if(i+len>sizeof(str1)) {
printf("插入會(huì)越界,失敗\n");
return;//結(jié)束函數(shù)
}
//在str1移動(dòng)數(shù)據(jù) 預(yù)留足夠的位置
while(i>=pos) {
str1[i+len] = str1[i];
i--;
}
//將str2的字符串 插入到pos位置上
int j=0;
while(str2[j] != '\0') {
str1[pos] = str2[j];
pos++;
j++;
}
printf("插入后的結(jié)果:%s\n", str1);
}
int main(int argc, char *argv[]) {
test06();
return 0;
}