C 理解指针
我是C语言的新手。我很难理解以下两种语言之间的区别C 理解指针,c,pointers,C,Pointers,我是C语言的新手。我很难理解以下两种语言之间的区别 int N = 16 double (*XX)[2] = malloc(2*N*sizeof(double)); 及 如果我写第一个,它就会被编译。然而,第二个给出了以下错误。请解释一下 error: invalid initializer 编辑:我还想问一下,在上述正确的情况下,malloc在做什么? double (*XX)[2] double *XX[2] XX是指向2个双精度数组的指针 在这种情况下 double (*X
int N = 16
double (*XX)[2] = malloc(2*N*sizeof(double));
及
如果我写第一个,它就会被编译。然而,第二个给出了以下错误。请解释一下
error: invalid initializer
编辑:我还想问一下,在上述正确的情况下,malloc在做什么?
double (*XX)[2]
double *XX[2]
XX是指向2个双精度数组的指针
在这种情况下
double (*XX)[2]
double *XX[2]
XX是指向双精度的2个指针的数组
编辑:
其他人已经解释了malloc,但是用外行的术语:使用malloc,您可以使用malloc在计算机上保留一定数量的内存,然后将值存储在使用malloc保留的内存中
malloc
将返回指向某个内存位置的指针(void*
)double(*XX)[2]
是指向一个double数组的指针-没问题:编译器知道如何从void*
转换到double*
double*XX[2]
是一个双指针数组我更喜欢这样写double*XX[2]
对我来说,理解我们所说的双指针更容易些)-编译器不知道从void*
到双指针数组的转换double(*XX)[2]
是指向包含两个double
元素的数组的指针
double*XX[2]
是指向包含两个double*
元素的数组的指针
malloc
用于动态内存分配,例如:
char数组_堆栈[2];//堆栈上分配了2个字符(不需要free())
char*array_heap=malloc(2*sizeof(char));//堆上分配的2个字符
//后来。。。
空闲(数组_堆);//堆内存必须由用户释放
供参考:
char数组_堆栈[2];//然而,这是一个指针
char*array=array_stack;//这是可行的,因为数组_堆栈是指向字符的指针
有关堆栈和堆的详细信息:
double*XX[2]=malloc(2*N*sizeof(double));
不起作用,因为它需要两个元素作为初始值设定项。例如:
double\u1,u2;
double*XX[2]={&_1,&_2};
如果要使用malloc执行此操作,则需要将其更改为指向具有双指针的数组的指针,如下所示:
double**XX=malloc(…);
XX在第一种情况下只是一个指针,指向一个包含两个双元素的数组。所以“sizeof(XX)”只有4
第二种情况:
XX是一个数组名,包含两个元素,其类型为(double*)。
所以下面的代码就可以了。
双*XX[2];
XX[1]=malloc(20*sizeof(双)) 第一个定义
double(*XX)[2]
定义了一个值,这里是一个指针。单个变量可以由单个值初始化,该值由=malloc(…)
返回
第二个(
double*XX[2]
)定义了一个数组。数组初始化器看起来像这样的={}
你能不能在我的问题中添加关于“malloc”在做什么的答案