C/C++ 二维数组赋值问题

C/C++ 二维数组赋值问题

在C/C++中,二维数组的赋值需要理解数组的定义、内存布局以及如何正确地赋值。以下是详细的说明和示例。

1. 定义二维数组

二维数组的定义包括指定数组的行和列。以下是几种定义二维数组的方式:

cpp
// 定义一个3行4列的二维数组 int arr[3][4]; // 定义并初始化二维数组 int arr2[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };

2. 逐元素赋值

可以通过循环逐元素地给二维数组赋值:

cpp
#include <iostream> int main() { int arr[3][4]; // 使用双重循环逐元素赋值 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { arr[i][j] = i * 4 + j + 1; } } // 打印数组 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { std::cout << arr[i][j] << " "; } std::cout << std::endl; } return 0; }

3. 使用指针操作二维数组

二维数组在内存中是连续存储的,可以通过指针进行赋值:

cpp
#include <iostream> int main() { int arr[3][4]; int *ptr = &arr[0][0]; for (int i = 0; i < 12; i++) { *(ptr + i) = i + 1; } // 打印数组 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { std::cout << arr[i][j] << " "; } std::cout << std::endl; } return 0; }

4. 使用标准库函数 memset 进行赋值

memset 函数可以用于初始化数组,但只能用于初始化为0或其他字节级值:

cpp
#include <cstring> #include <iostream> int main() { int arr[3][4]; // 将数组全部初始化为0 memset(arr, 0, sizeof(arr)); // 打印数组 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { std::cout << arr[i][j] << " "; } std::cout << std::endl; } return 0; }

5. 动态分配二维数组

在某些情况下,可能需要动态分配二维数组。可以使用指针数组或指针的指针进行动态分配:

cpp
#include <iostream> int main() { int rows = 3; int cols = 4; // 动态分配二维数组 int **arr = new int*[rows]; for (int i = 0; i < rows; i++) { arr[i] = new int[cols]; } // 赋值 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { arr[i][j] = i * cols + j + 1; } } // 打印数组 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { std::cout << arr[i][j] << " "; } std::cout << std::endl; } // 释放内存 for (int i = 0; i < rows; i++) { delete[] arr[i]; } delete[] arr; return 0; }

总结

在C/C++中,二维数组的赋值可以通过多种方式实现,包括直接初始化、使用循环逐元素赋值、指针操作、使用标准库函数 memset,以及动态分配二维数组。选择适当的赋值方式取决于具体的需求和场景。

关键字

C/C++,二维数组,赋值,内存布局,指针,动态分配,循环,初始化,标准库函数 memset