C语言成长之路41:一维数组详解
声明:本笔记基于 B站UP主「来自程序员的暴击」的 「C语言成长之路」中对应课程;
1、数组的概念:
数组是可以在内存中连续存储多个元素的结构;
数组中的所有元素必须属于相同的数据类型;
举例:
1 int a[5] = {0,1,2,3,4}; 2 printf("%p",&a);
2、数组语法
类型:
类型 数组名[元素个数] = {0};
例:
#include <stdlib.h> #include <stdio.h> int main() { /* C语言成长之路41:一维数组详解 */ int a[10] = { 0 }; int b[] = { 1,2,3 }; // 当数组元素确定的时候,数组的个数可以忽略 int c[5] = { 1,2,3 }; // 不足用0填充 }
注:要防止下标越界的错误发生,对上面声明的数组a来说,有效的下标应该是0~9,在程序中如果出现了a[10],编译器可能不会报错,但是这个越界可能会引起程序的崩溃。
#include <stdlib.h> #include <stdio.h> int main() { /* C语言成长之路41:一维数组详解 */ int a[10] = { 0 }; int b[] = { 1,2,3 }; // 当数组元素确定的时候,数组的个数可以忽略 printf("%p\n", &b); // 结果:00E9F940 <--内存地址 int c[5] = { 1,2,3 }; // 不足用0填充 for (int i = 0; i < 5; i++) { printf("%d\n", c[i]); /* c[0] = 1; c[1] = 2; c[2] = 3; c[3] = 0; c[4] = 0; */ } }
还有另外一种思路,通过define去定义常量,在数组中进行引用,这个方法好在于在大型项目当中,可以通过修改define的值,进行批量修改:
注:一个int类型占用4个字节,int类型的数组里面有N个元素,那就是N*4个字节的大小
思考:
求一个未知元素个数的数组的大小:
1 #include <stdlib.h> 2 #include <stdio.h> 3 #define N 5 //定义常量N,并赋值为int类型的5 4 5 int main() { 6 /* 7 C语言成长之路41:一维数组详解 8 */ 9 int d[N] = {1,2,3,4,5}; 10 int array_num = sizeof(d) / sizeof(int); 11 printf("d's array_num = %d", array_num); // 结果:d's array_num = 5 12 }
循环打印数组:
#include <stdio.h> void main(){ int a[5] = {1,2,3,4,5}; for (int i = 0;i<5;i++){ printf("%d\n",a[i]); } };
循环打印数组元素的内存地址:
#include <stdio.h> void main(){ int a[5] = {1,2,3,4,5}; for (int i = 0;i<5;i++){ printf("a[%d] = %d, &a[%d] = %x\n",i,a[i],i,&a[i]); } /* 结果如下: * a[0] = 1, &a[0] = ee5f8900 * a[1] = 2, &a[1] = ee5f8904 * a[2] = 3, &a[2] = ee5f8908 * a[3] = 4, &a[3] = ee5f890c * a[4] = 5, &a[4] = ee5f8910 */ };
关于转换符的一些说明:
%a(%A) 浮点数、十六bai进制du数字zhi和p-(P-)记数法(C99)
%c 字符
%d 有符号十进制整数
%f 浮点数dao(包括float和doulbe)
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
%i 有符号十进制整数(与%d相同)
%u 无符号十进制整数
%o 八进制整数 e.g. 0123
%x(%X) 十六进制整数0f(0F) e.g. 0x1234
%p 指针
%s 字符串
%% "%"