数组中的一些问题

初始化数组
1.int ages[3] = {4, 6, 9};
2.int nums[10] = {1,2}; // 其余的自动初始化为0;
3.int nums[] = {1,2,3,5,6}; // 根据大括号中的元素个数确定数组元素的个数 ;
4.int nums[5] = {[4] = 3,[1] = 2}; // 指定元素个数,同时给指定元素进行初始化 ;
5.int nums[3]; nums[0] = 1; nums[1] = 2; nums[2] = 3; // 先定义,后初始化 。
定义但是未初始化,数组中有值,但是是垃圾值。
对于数组来说,一旦有元素被初始 化,其他元素都被赋值0。

计算数组中元素的个数
int count = sizeof(数组) / sizeof(数组[0]) // 数组的长度 = 数组占用的总字节数 / 数组元素占用的字节数

数组注意事项
在定义数组的时候[]里面只能写整型常量或者是返回整型常量的表达式。
1.int ages[‘A’] = {19, 22, 33};
2.printf(“ages[0] = %d\n”, ages[0]);
3.int ages[5 + 5] = {19, 22, 33};
4.printf(“ages[0] = %d\n”, ages[0]);
5.int ages[‘A’ + 5] = {19, 22, 33};
6.printf(“ages[0] = %d\n”, ages[0]) .

错误写法
没有指定元素个数(int nums[] = {1,2,3,5,6}; 这样是可以的,但是如果先声明,并没有初始化,则是错误的)
int a[]; // 错误 ,[]中不能放变量
1.int number = 10;
int ages[number]; // 不报错, 但是没有初始化, 里面是随机值 ;
2. int number = 10 ;
int ages[number] = {19, 22, 33} // 直接报错 ;int ages[number] = {19, 22, 33} // 直接报错 ;
3.int ages10[5];
ages10 = {19, 22, 33}; // 错误。只能在定义数组的时候进行一次性(全部赋值)的初始化

冒泡排序
主要思想是两个相邻的元素进行比较,以由小到大排序为例,那么由第一个元素开始和第二个比较,如果第一个比第二个大,那么就进行交换;然后进行第二个和第三个元素的比较,以此类推,第一轮之后,那么数组的最后一个元素就是最大的,以此类推。
void bubbleSort(int numbers[], int length) {
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (numbers[j] > numbers[j + 1]) {
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
}
int main(int argc, const char * argv[]) {
int myArray[] = {42, 7, 1, -3, 88};
int length = sizeof(myArray) / sizeof(myArray[0]);
bubbleSort(myArray, length);
for (int i = 0; i < length; i++) {
printf("%i ", myArray[i]);
}
return 0;
}
注意这里和选择排序不同的是,比较的并非numbers[i]和numbers[j],而是比较的numbers[j]和numbers[j+1],而外层循环的i代表比较的轮数,内层循环才是真正的每一轮进行的比较。这里是由小到大排序。

猜你喜欢

转载自blog.csdn.net/qq_43638758/article/details/84109790