int **A=(int **)malloc(N*sizeof(int));解释这句代码
时间: 2023-09-30 21:06:57 浏览: 94
这句代码分配了一个指向指针的指针数组,该数组的大小为N,每个指针指向一个int类型的变量。由于是二级指针,因此需要用两个 * 符号来声明。但是这里的代码有一个错误:应该是 int **A=(int **)malloc(N*sizeof(int*));,因为二级指针指向的是一个指针,所以在分配内存时应该分配指针的大小,即 sizeof(int*)。
相关问题
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。
#include<stdio.h> #include<stdlib.h> void main() { int *a, *b, *c; a=b=c=(int *)malloc(sizeof(int)); *a=1; *b=2; *c=3; a=b; printf("%d%d%d \n", *a, *b, *c); }
这段代码存在一些问题,我帮你进行修正:
```c
#include <.h>
#include <stdlib.h>
int main() {
int *a, *b, *c;
a = b = c = (int *)malloc(sizeof(int));
*a = 1;
*b = 2;
*c = 3;
b = a; // 修改为 b = a;
printf("%d %d %d\n", *a, *b, *c);
free(a); // 释放动态分配的内存
return 0;
}
```
修正后的代码输出为 "1 1 3"。
修正的问题:
1. 将 `void main()` 修改为 `int main()`,使得 `main` 函数返回一个整数类型的值。
2. 在 `printf` 函数中,修改为 `%d %d %d`,使得输出的整数之间有空格分隔开来。
3. 添加了 `free(a);` 语句,释放动态分配的内存,避免内存泄漏。
阅读全文