在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
01-C基础第06天(数组)
目录:
1、数组的定义和使用
2、一维数组
练习:冒泡排序
3、二维数组
4、字符数组
练习:函数的调用:产生随机数
练习:双色球
1、数组的定义和使用
格式:
数据类型 数组名[元素个数]
元素个数,代表该数组有多少个相同数据类型的变量
下标,用来表示数组中的某一个元素,例如 int arr[10]; arr[1]代表数组的第二个元素
数组下标是从0开始的,到数组元素个数-1
数组下标越界:超出了数组元素个数的下标,如果操作越界,数据会出现程序错误1、乱码错误 2、报错
求出数组元素个数:
int (size_t) unsigned int 个数 = sizeof(数组名)/sizeof(数组元素 | 数组数据类型)
求出数组地址:
printf("%p ",数组名);
printf("%p ",数组元素);
数组元素+1 (sizeof(数据类型))
数组名+1 (sizeof(数据名))
注意:“格式控制符“%p”中的p是pointer(指针)的缩写,printf函数族中对于%p一般以十六进制整数方式输出指针的值,附加前缀0x。 %p是打印地址的, %x是以十六进制形式打印,完全不同。
数组就是在内存中连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的。
数组属于构造数据类型:
(1)一个数组可以分解为多个数组元素:这些数组元素可以是基本数据类型或构造类型。
(2)按数组元素类型的不同,数组可分为:数值数组、字符数组、指针数组、结构数组等类别。
通常情况下,我们将二维及以上的数组称为多维数组。
2、一维数组
(1)数组名不能与其它变量名相同,同一作用域内是唯一的
(2)定义数组时[]内最好是常量,使用数组时[]内即可是常量,也可以是变量
(3)在定义数组的同时进行赋值,称为初始化。全局数组若不初始化,编译器将其初始化为零。局部数组若不初始化,内容为随机值。
(4)数组名是一个地址的常量,代表数组中首元素的地址。
练习:冒泡排序
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 int main() 7 { 8 9 int arr[10] = { 7,4,2,3,5,8,9,6,1,10 }; 10 int len = sizeof(arr) / sizeof(arr[0]) - 1; 11 //冒泡排序 从小到大 12 //外层循环每次执行都能确定一个最大值 13 for (int i = 0; i < len; i++) 14 { 15 //内层循环内次执行能确定两个数值中的最大值 16 for (int j = 0; j < len - i; j++) 17 { 18 if (arr[j] > arr[j + 1]) 19 { 20 //两个数据交换位置 21 int temp = arr[j]; 22 arr[j] = arr[j + 1]; 23 arr[j + 1] = temp; 24 } 25 } 26 } 27 for (int i = 0; i < 10; i++) 28 { 29 printf("%d ", arr[i]); 30 } 31 32 system("pause"); 33 return EXIT_SUCCESS; 34 }
3、二维数组
格式:数据类型 数组名[行个数][列个数]
初始化方式:
int arr[2][3] = {{1,2,3},{2,3,4}};
int arr[][3] = {{1,2,3},{2,3,4}};
int arr[4][3] = {1,2,3,4,5,6,7,8,9};
int arr[4][3] = {{1},{1},{1}};
int arr[4][3] = {1,2,3,4};
求行数:sizeof(数组名)/sizeof(数组名[0]);
求列数:sizeof(数组名[0])/sizeof(数组名[0][0]);
二维数组首地址表示方式:
printf("%p ",数组名);
4、字符数组
字符数组与字符串区别
(1)C语言中没有字符串这种数据类型,可以通过char的数组来替代(C语言没有字符串类型,通过字符数组模拟);
(2)字符串一定是一个char的数组,但char的数组未必是字符串;
(3)数字0(和字符‘