一、数组
数组 Array是一组数据的集合 ,在c语言中,比如:字符串 char ,是一种数组,字符串由多个字符构成;在定义时,首先要明确数组的大小。
数组中的每一个数据叫做数组元素 Element,数组中的每个元素都有一个序号,这个序号从 0 开始,称为下标 Index,例如,a[0] 表示第0个元素,a[3] 表示第3个元素。数组是一个整体,它的内存是连续的,
[图片]
静态数组
:是在编译时,要确定数组大小, 因此为了防止内存溢出,需要合适定义数组大小
//静态数组定义
//整形数组
int a[5] = {1,2,3,4,5}; //数组长度为5,只能存放5个元素
//浮点数数组
float a[5] = {1.0,2.0,3.0,4.0,5.0}; //数组长度为5,只能存放5个元素
//浮点数数组
double a[5] = {1.0,2.0,3.0,4.0,5.0}; //数组长度为4,只能存放4个元素
//字符串
char a[5] = "12345"; //数组长度为4,只能存放4个元素
//访问数组
print("数组第1 个元素 a[0]=", a[0]); // 数组第1 个元素 a[0]=1
动态数组 :
它不需要在编译时就确定大小,它的大小在程序运行过程中确定,所以可以根据程序需要而灵活的分配数组的大小,相比静态数组,它更“灵活”、“自由”。但是动态数组需要进行显式的内存释放。
//动态数组定义
int *a = (int*)malloc(sizeof(int)*10);
int *a = new int[10];
完整代码
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int main(int argc, char** argv){
int a[10];
printf("%.16X\n", (uint64_t)(&a));
printf("%.16X\n", (uint64_t)(a));
int *b = new int[10];
printf("%.16X\n", (uint64_t)(&b));
printf("%.16X\n", (uint64_t)(b));
delete[] b; b = NULL;
return EXIT_SUCCESS;
}
// 输出结果
000000006D4AB370
000000006D4AB370
000000006D4AB358
000000001FE05D40
总结:
a[0] 的地址和a 地址一样
b是个变量, 是个指针。 变量的地址与他存储地址是不同