关于二维指针的初始化

一个初级的问题:

char *a; char **arr, **firstPos;

a = (char *) malloc(8);

strcpy(a,"123");

arr = & a;

firstPos = arr;

arr ++;

a = (char *) malloc(8);

strcpy(a,"456");

arr = & a;

运行发现 第二次 arr = &a 之后, *firstPos 的值也变成了"456"

原因在于:

arr 中存放的是a 的地址(一直不变的) Initialization 的方法 1. char *a[] = {"123", "456",NULL}; char **arr; arr = a; 2.int **array1 = (int **)malloc(nrows * sizeof(int *)); for(i = 0; i
在 C/C++ 中,初始化一个包含二维指针的结构体需要理解内存分配和结构体嵌套的机制。通常,结构体中包含指向二维数组的指针,需要动态分配内存来支持二维数组的访问。 ### 初始化结构体定义 假设有如下结构体定义: ```cpp struct Matrix { int** data; // 二维指针 int rows; int cols; }; ``` 该结构体 `Matrix` 包含一个二维指针 `data`,以及表示矩阵行数和列数的 `rows` 和 `cols`。 ### 动态分配与初始化 要正确初始化这个结构体,需要动态分配内存以支持二维数组。以下是具体步骤: 1. **分配结构体内存**:使用 `new` 或直接声明结构体变量。 2. **分配行指针数组**:为 `data` 分配指向指针指针。 3. **分配每行的内存**:为每一行分配 `cols` 个整型空间。 示例代码如下: ```cpp Matrix* createMatrix(int rows, int cols) { Matrix* matrix = new Matrix; matrix->rows = rows; matrix->cols = cols; // 分配行指针数组 matrix->data = new int*[rows]; // 分配每行的内存 for (int i = 0; i < rows; ++i) { matrix->data[i] = new int[cols]; } return matrix; } ``` ### 初始化数据 初始化数据时,可以遍历每个元素并赋值。例如: ```cpp void initializeMatrix(Matrix* matrix, int value) { for (int i = 0; i < matrix->rows; ++i) { for (int j = 0; j < matrix->cols; ++j) { matrix->data[i][j] = value; } } } ``` ### 释放内存 为了避免内存泄漏,在使用完结构体后需要释放动态分配的内存: ```cpp void deleteMatrix(Matrix* matrix) { if (matrix && matrix->data) { for (int i = 0; i < matrix->rows; ++i) { delete[] matrix->data[i]; // 释放每行 } delete[] matrix->data; // 释放行指针数组 delete matrix; // 释放结构体 } } ``` ### 使用示例 ```cpp int main() { Matrix* mat = createMatrix(3, 4); initializeMatrix(mat, 1); // 打印矩阵 for (int i = 0; i < mat->rows; ++i) { for (int j = 0; j < mat->cols; ++j) { std::cout << mat->data[i][j] << " "; } std::cout << std::endl; } deleteMatrix(mat); return 0; } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值