目录
介绍
声明时初始化
对于基本数据类型数组(如int, float等)
对于字符数组(字符串)
声明后逐个赋值
使用循环批量赋值
使用 memset 快速填充(适用于字节级赋值)
注意事项
使用 memcpy 复制数组
对于字符串数组,可以使用strcpy(注意:只能用于以'\0'结尾的字符串)
注意事项
介绍
在C语言中,给数组赋值有多种方式,具体取决于数组的类型(例如,是基本数据类型还是字符数组)以及赋值的方式(初始化时赋值还是后续赋值)。以下是一些常见的情况:
声明时初始化
对于基本数据类型数组(如int, float等)
// 完整初始化
int arr1[5] = {1, 2, 3, 4, 5};
// 部分初始化(剩余元素自动赋值为0)
int arr2[5] = {10, 20}; // [10, 20, 0, 0, 0]
// 省略数组长度(编译器自动计算)
int arr3[] = {7, 8, 9}; // 长度=3
对于字符数组(字符串)
// 字符数组(字符串)
char str1[] = "Hello"; // 自动添加结束符'\0'(长度=6)
char str2[5] = {'W', 'o', 'r', 'l', 'd'}; // 无结束符
声明后逐个赋值
int arr[3];
arr[0] = 100; // 下标从0开始
arr[1] = 200;
arr[2] = 300;
使用循环批量赋值
#include
#define SIZE 5
int main() {
int numbers[SIZE];
// 通过循环赋值
for (int i = 0; i < SIZE; i++) {
numbers[i] = i * 10; // 赋值为0,10,20,30,40
}
// 打印验证
for (int i = 0; i < SIZE; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
return 0;
}
使用 memset 快速填充(适用于字节级赋值)
#include
int main() {
int arr[10];
// 将数组所有字节设为0(常用于清零)
memset(arr, 0, sizeof(arr));
char text[10];
memset(text, 'A', sizeof(text)); // 填充为'A'(注意:最后一个字符不是结束符)
text[9] = '\0'; // 手动添加结束符(若需作为字符串使用)
return 0;
}
注意事项
memset是按字节赋值的,使用memset将数组的所有字节设置为特定值(通常用于0或特定字节值)
int a;
memset(a,0,sizeof(int)); // a = 0x00000000 = 0
memset(a,1,sizeof(int)); // a = 0x01010101 = 16843009
使用 memcpy 复制数组
#include
int main() {
int src[] = {99, 88, 77};
int dest[3];
// 复制整个数组 将src数组的内容复制到dest
memcpy(dest, src, sizeof(src)); // dest = {99, 88, 77}
return 0;
}
对于字符串数组,可以使用strcpy(注意:只能用于以'\0'结尾的字符串)
char src[] = "Hello World";
char dest[20];
strcpy(dest, src); // 复制字符串,包括结束符
注意事项
数组长度固定:声明后长度不可改变。
下标越界:访问 arr[n](n>=数组长度)会导致未定义行为。
数组名是常量指针:不能直接赋值(如 arr1 = arr2 是非法的)。
字符数组 vs 字符串:字符数组需手动添加 '\0' 才能作为字符串使用。