C 指向数组的指针,分配数组
我想要(ptr+1)一个阵列,请帮助我。C 指向数组的指针,分配数组,c,pointers,C,Pointers,我想要(ptr+1)一个阵列,请帮助我。 谢谢。ptr是指向int数组(int[2])的指针,但是您将malloc设置为错误的大小,然后通过分配给同一变量泄漏内存,从而覆盖malloc内存地址。我假设你想这样做: int main() { // int arr[2][2] = { {1,2}, {3,4}}; int a[] = {1,2}; int b[] = {3,4}; int (*ptr)[2]; // assign ptr to arr
谢谢。
ptr
是指向int数组(int[2]
)的指针,但是您将malloc设置为错误的大小,然后通过分配给同一变量泄漏内存,从而覆盖malloc
内存地址。我假设你想这样做:
int main() {
// int arr[2][2] = { {1,2}, {3,4}};
int a[] = {1,2};
int b[] = {3,4};
int (*ptr)[2];
// assign ptr to arr
//ptr = arr;
ptr = (int (*)[2])malloc (2*sizeof(int));
ptr = &a;
(ptr+1) = b; // error here
printf("%3d %3d", ptr[0][1], ptr[1][1]) ;
}
完整代码:
int (**ptr)[2];
ptr = malloc (2*sizeof(int(*)[2]));
ptr[0] = &a;
ptr[1] = &b;
#包括
#包括
int main(){
int a[]={1,2};
int b[]={3,4};
int**ptr;
ptr=(int**)malloc(sizeof(int*)*2);
ptr[0]=a;
ptr[1]=b;
printf(“%3d%3d\n”,ptr[0][1],ptr[1][1]);
免费(ptr);
}
a和b已经是指针(指向整数),因此ptr是指向指针(**)的指针。您需要使用指针数组,而不是指向数组的指针:
#include <stdlib.h>
#include <stdio.h>
int main() {
int a[] = {1,2};
int b[] = {3,4};
int **ptr;
ptr = (int **) malloc(sizeof(int *) * 2);
ptr[0] = a;
ptr[1] = b;
printf("%3d %3d\n", ptr[0][1], ptr[1][1]);
free(ptr);
}
你可以这样做
int main()
{
int a[] = {1,2};
int b[] = {3,4};
int *ptr[2] = { a, b };
printf("%3d %3d", ptr[0][1], ptr[1][1]) ;
return 0;
}
#包括
#包括
int main(int argc,char*argv[]){
int i;
int a[]={1,2};
int b[]={3,4};
int*ptr[2];//与ptr[2][??]相同
ptr[0]=(int*)malloc(sizeof(int*)*2);//malloc ptr[0]>>2*sizeof int
ptr[1]=(int*)malloc(sizeof(int*)*5);//malloc ptr[1]>>5*sizeof int
/*我们得到了ptr[0][2]和ptr[1][5]*/
/*设定值*/
对于(i=0;i<2;i++)
ptr[0][i]=i;
对于(i=0;i<5;i++)
ptr[1][i]=i;
/*打印值*/
对于(i=0;i<2;i++)
printf(“ptr[0][%03d]=%03d\n”,i,ptr[0][i]);
printf(“\n”);
对于(i=0;i<5;i++)
printf(“ptr[1][%03d]=%03d\n”,i,ptr[1][i]);
/*自由指针*/
自由(ptr[0]);
免费(ptr[1]);
返回0;
}
ptr是指向int数组(int[2])等效二维数组(ptr=arr)的指针。因为,我认为(ptr+1)将指向一个数组。请帮我解释一下,这里的错误。谢谢。pointer!=数组
您在malloc
中所做的分配是为了创建一个2-int数组,而不是2个2-int数组。
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
int i;
int a[] = {1,2};
int b[] = {3,4};
int *ptr[2]; //same as ptr[2][??]
ptr[0] = (int *) malloc(sizeof(int*) * 2); //malloc ptr[0] >> 2 * sizeof int
ptr[1] = (int *) malloc(sizeof(int*) * 5); //malloc ptr[1] >> 5 * sizeof int
/* so we get ptr[0][2] and ptr[1][5]*/
/* SET VALUE */
for(i = 0; i < 2; i++)
ptr[0][i] = i;
for(i = 0; i < 5; i++)
ptr[1][i] = i;
/* PRINT VALUE */
for(i = 0; i < 2; i++)
printf("ptr[0][%03d] = %03d\n", i, ptr[0][i]);
printf("\n");
for(i = 0; i < 5; i++)
printf("ptr[1][%03d] = %03d\n", i, ptr[1][i]);
/* FREE POINTER */
free(ptr[0]);
free(ptr[1]);
return 0;
}