int** c = (int**)malloc(sizeof(int*) * n); for(int i=0;i<n;i++) { int* c[i] = (int*)malloc(sizeof(int) * m); }vs2022报错i不为常量怎么解决
时间: 2023-11-22 22:05:21 浏览: 35
在这段代码中,变量i是一个变量,而不是一个常量。在C语言中,数组的长度必须是一个常量,因此编译器会报错。要解决这个问题,你可以使用动态内存分配来创建一个动态数组,这样就可以避免这个问题。你可以使用类似于引用和引用中的方法来动态分配内存。具体来说,你可以使用以下代码来创建一个动态数组:
int** c = (int**)malloc(sizeof(int*) * n);
for(int i=0;i<n;i++)
{
c[i] = (int*)malloc(sizeof(int) * m);
}
这将创建一个大小为n*m的二维数组c。注意,你需要在程序结束时使用free()函数释放动态分配的内存,以避免内存泄漏。
相关问题
int**p;**p=(int**)malloc(n*sizeof(int*))正确吗?
不, int**p;**p=(int**)malloc(n*sizeof(int*)) 不是正确的。这段代码有两个问题。首先,int** p;声明了一个指向指针的指针变量p。接下来,**p=(int**)malloc(n*sizeof(int*))试图将分配的内存地址赋值给二级指针p,这是不正确的,因为**p是一个值,而不是一个指针。正确的写法应该是 *p = (int*)malloc(n*sizeof(int)),这样可以将分配的内存地址赋值给一级指针p。
p=(int**)malloc(m*sizeof(int*)
p=(int**)malloc(m*sizeof(int*))的含义是定义一个指向指针的指针变量p,并申请m*sizeof(int*)个字节的存储空间,其中每个指针变量占用sizeof(int*)个字节。这样可以创建一个二维数组,其中第一维有m个指针,每个指针指向一个int类型的数组,从而实现二维数组的效果。
以下是一个示例代码,演示如何使用p=(int**)malloc(m*sizeof(int*))创建一个二维数组,并对其进行赋值和输出:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int m = 3, n = 4;
int **p = (int**)malloc(m*sizeof(int*));
for (int i = 0; i < m; i++) {
p[i] = (int*)malloc(n*sizeof(int));
for (int j = 0; j < n; j++) {
p[i][j] = i*n + j;
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", p[i][j]);
}
printf("\n");
}
for (int i = 0; i < m; i++) {
free(p[i]);
}
free(p);
return 0;
}
```
输出结果为:
```
0 1 2 3
4 5 6 7
8 9 10 11
```