文章目录
1. 数组
1.1 一维数组
- 用法:<存储类型> <数据类型> <数组名> [<表达式>],比如int a[6]
- 数组的初始化:type var[n]={..., ..., ...};
- 数组不初始化,其元素值为随机值
- 对存储类型为static的数组不初始化,系统会自动赋0值
- 初始化时可以给定部分值:
int a[6]={3,4}, i;
for (i=0; i<6; i++)
printf("%d ", a[i]);
printf("n");
3 4 0 0 0 0
- 编译时分配连续内存字节数=数组元素数*sizeof(元素数据类型)
- 用上面那个例子a指向内存首地址
int a[6], i;
for (i=0; i<6; i++)
printf("第%d个元素的地址:%pn", i, &a[i]);
printf("a:%pn", a);
printf("数组占的总内存空间:%ldn", sizeof(a));
printf("假如不知道数组长度,可以通过sizeof(a)/sizeof(int)=%ld得到", sizeof(a)/sizeof(int));
Return第0个元素的地址:0x7fff33222530
第1个元素的地址:0x7fff33222534
第2个元素的地址:0x7fff33222538
第3个元素的地址:0x7fff3322253c
第4个元素的地址:0x7fff33222540
第5个元素的地址:0x7fff33222544
a:0x7fff33222530
数组占的总内存空间:24 //=4*6
假如不知道数组长度,可以通过sizeof(a)/sizeof(int)=6得到
- 注意:C语言对数组不做越界检查使用的时候要注意
- 练习:从终端输入10个数字(乱序),利用简单选择排序法对这10个数字排序,结果从小到大排列。
#include
# define n 10
int main(int argc, char *argv[])
{
int int_list[n], min_value=9999, i, j, idx, tmp;
printf("Please input a vector with %d entries: ", n);
for (i=0; i
tmp = scanf("%d", &int_list[i]);
}
for(i=0; i
min_value = int_list[i];
for(j=i+1; j
if (min_value > int_list[j]){
min_value = int_list[j];
idx = j;
}
}
tmp = int_list[i];
int_list[i] = int_list[idx];
int_list[idx] = tmp;
}
for (i=0; i
printf("%d ", int_list[i]);
}
putchar('n');
return 0;
}
1.2 二维数组
- 用法:数据类型 数组名[行数][列数],声明时列数不能省略,但行数可以
- 初始化有两种
int a[2][3]={{1, 2, 3}, {4, 5, 6}}; //基本用法
int a[2][3]={{1, 2}, {3}}; //部分初始化,返回{{1, 2, 0},{3, 0, 0}}
int a[][3]={{1, 2}, {3}}; //省略行号,返回{{1, 2, 0},{3, 0, 0}}
int a[2][3]={1, 2, 3, 4, 5, 6}; //会警告少括号不规范,但是能编译能运行
- 虽然这是二维数组,但在内存中还是一维排序的,且按行优先
- 索引
| 行索引 | 元素索引 | 元素索引 | 元素索引 |
|---|
| a[0] | a[0][0] | a[0][1] | a[0][2] |
| a[1] | a[1][0] | a[1][1] | a[1][2] |
| a[2] | a[2][0] | a[2][1] | a[2][2] |
- 举例
int a[2][3];
int i, j;
for (i=0;i<2;i++){
for (j=0; j<3; j++)
printf("%p ", &a[i][j]);
putchar('n');
}
printf("a: %p %ldn", a, sizeof(a));
printf("a[0]: %p %ldn", a[0], sizeof(a[0]));
printf("a[1]: %p %ldn", a[1], sizeof(a[1]));
return 0;
Return0x7fff16508a80 0x7fff16508a84 0x7fff16508a88
0x7fff16508a8c 0x7fff16508a90 0x7fff16508a94
a: 0x7fff16508a80 24
a[0]: 0x7fff16508a80 12
a[1]: 0x7fff16508a8c 12