概念
数组是一种用来存储相同数据项的集合,声明时必须指定类型和大小。
// 声明一个整型数组,包含5个元素
int numbers[5];
// 初始化数组
int numbers[5] = {10, 20, 30, 40, 50};
具体操作
#include <stdio.h>
int main(){
int arr[3] = {520,1314,5201314}; //初始化数组
int lenth = sizeof(arr)/sizeof(arr[0]); //获取数组长度
printf("数组如下:\n");
for (int i = 0;i < lenth;i ++){ //遍历数组
printf("arr[%d] = %d\n",i,arr[i]); //输出数组元素
};
int i;
scanf("%d",&i);
printf("the result is %d\n",i); //查找元素
return 0;
}
arr[0] = 520
arr[1] = 1314
arr[2] = 5201314
1
the result is 1
解释
获取长度:先计算整个数组[a]大小,再除以单位元素(a[0])的大小,就可以得到数组的长度。
sizeof()
概念:C语言中编译性运算符,返回变量等在内存中的大小(占的字节数)。
直接使用就行:
#include <stdio.h>
int main() {
printf("Size of char: %zu bytes\n", sizeof(char));
printf("Size of int: %zu bytes\n", sizeof(int));
printf("Size of float: %zu bytes\n", sizeof(float));
printf("Size of double: %zu bytes\n", sizeof(double));
return 0;
}/*
Size of int: 4
size of char:1
size of float:4
*/
需要特别记忆的是 char 类型为1, int 类型为 4.
比如在以后的pwn题目脚本编写中,需要在 int a[13] 数组中填充数据,并在 a[6] 位填充17,就需要将前6位填满 (数组顺序是 0 1 3 4 5...)
payload = b"a"*6*4 + p64(17)
//因为这里是int类型数组, int 是 char 大小的四倍,所以 *4
也可以直接用 int 类型填充,但这里我还不清楚
数组注意
- 类型一致性:数组中的所有元素必须是同一数据类型。
- 固定大小:数组的大小在声明时确定,之后不能改变。
- 连续存储:数组的元素在内存中是连续存储的。
- 索引访问:可以通过索引(从0开始)来访问数组中的元素。