C语言 关于为指针的指针分配内存的问题
答案:5 悬赏:30
解决时间 2021-01-21 18:22
- 提问者网友:两耳就是菩提
- 2021-01-21 09:56
C语言 关于为指针的指针分配内存的问题
最佳答案
- 二级知识专家网友:举杯邀酒敬孤独
- 2021-01-21 10:51
首先:int** 是一个二级指针,它是指针的指针,如果你要申请一个二维数组,有下面两个方法:
int** val = (int**)malloc(sizeof(int*) * 10);
int i;
for(i = 0; i < 10)
val[i] = (int*)malloc(sizeof(int) * 10);
然后你可以这样引用:*(*(val+m)+n) = value;
第二种:int* val = (int*)malloc(sizeof(int) * 10 * 10);
然后这样引用:*(m*10 + n) = value;
这其实就是个一维数组,不过你把它看成二维的处理。。
希望对你有帮助哦
int** val = (int**)malloc(sizeof(int*) * 10);
int i;
for(i = 0; i < 10)
val[i] = (int*)malloc(sizeof(int) * 10);
然后你可以这样引用:*(*(val+m)+n) = value;
第二种:int* val = (int*)malloc(sizeof(int) * 10 * 10);
然后这样引用:*(m*10 + n) = value;
这其实就是个一维数组,不过你把它看成二维的处理。。
希望对你有帮助哦
全部回答
- 1楼网友:爱难随人意
- 2021-01-21 13:56
使用sizeof,就和机器位数无关~
二级指针动态分配方式如下:
int **a;
a=(int**)malloc(m*sizeof(int*));
for(i=0;i a[i]=(int*)malloc(n*sizeof(int));
二级指针动态分配方式如下:
int **a;
a=(int**)malloc(m*sizeof(int*));
for(i=0;i
- 2楼网友:掌灯师
- 2021-01-21 13:11
array 是 int * * 型的吗?我在VC6.0测试,分配内存是正确的,但要明白,分配的内存都被认为是int*型的,也就是101个int*型的空间。
*(array+j)得到这101个空间中的某个,是int*型,*(*(array+j)+n)是这101个指针中的某一个指向的内存空间,而这个内存空间没有分配,所以程序运行时会出错。至于在16位机器上通过,只是侥幸而已,因为16位机器没有内存保护,所有的空间都能访问,如果访问了操作系统的空间,可能不会立即崩溃,但系统有可能出问题的。而32位机器有保护模式,访问非法空间系统会报错。
*(array+j)得到这101个空间中的某个,是int*型,*(*(array+j)+n)是这101个指针中的某一个指向的内存空间,而这个内存空间没有分配,所以程序运行时会出错。至于在16位机器上通过,只是侥幸而已,因为16位机器没有内存保护,所有的空间都能访问,如果访问了操作系统的空间,可能不会立即崩溃,但系统有可能出问题的。而32位机器有保护模式,访问非法空间系统会报错。
- 3楼网友:老鼠爱大米
- 2021-01-21 12:12
//给你一段代码看看,呵呵。
int i=0,j=0,x=10,y=10;
int **array=NULL;
//注意,是这样申请空间的,一次性完成
array=(int**)malloc(sizeof(int)*x*y + y*sizeof(int*));
array[0]=(int*)((char*)array + y*sizeof(int*));
for(i=1;i for( i = 0 ; i < y; i++ )
{
for( j = 0 ; j < x; j++ )
{
array[i][j] = j;
}
}
for( i = 0 ; i < y; i++ )
{
for( j = 0 ; j < x; j++ )
{
printf(" %d " , array[i][j]);
}
}
free(array);//注意,是这样释放空间的,一次性完成
int i=0,j=0,x=10,y=10;
int **array=NULL;
//注意,是这样申请空间的,一次性完成
array=(int**)malloc(sizeof(int)*x*y + y*sizeof(int*));
array[0]=(int*)((char*)array + y*sizeof(int*));
for(i=1;i
{
for( j = 0 ; j < x; j++ )
{
array[i][j] = j;
}
}
for( i = 0 ; i < y; i++ )
{
for( j = 0 ; j < x; j++ )
{
printf(" %d " , array[i][j]);
}
}
free(array);//注意,是这样释放空间的,一次性完成
- 4楼网友:十年萤火照君眠
- 2021-01-21 11:54
1、void* malloc(size_t size)。这个函数请求分配大小为size字节的内存,并返回指向该块内存起始位置的指针。
2、例程:#include
#include
void main()
{
int i,j;
int row,col;
int** matrix;
printf("input the row and col: ");
scanf("%d%d",&row,&col); //输入矩阵的行和列
//动态分配内存
// 为动态数组分配了二维的空间
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;i
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//输入
printf("please input the array elements: ") ;
for(i=0;i
for(j=0;j
scanf("%d",&matrix[i][j]);
}
}
//输出
for(i=0;i
printf(" ");
for(j=0;j
printf("%d ",matrix[i][j]);
}
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |