下面的程序是论坛在工藤♀新一的“关于malloc函数~知道的近来看一下哦“的一个回帖~想请教一下
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(void)
{
int **p, M, N, i, j;
printf("Enter M: "); /* 第1个下标大小 */
scanf("%d", &M);
printf("Enter N: "); /* 第2个下标大小 */
scanf("%d", &N);
if ((p = (int**)malloc(sizeof(int*) * M)) == NULL) /* 分配第一个下标 */
{
exit(1);
}
for (i = 0; i < N; i++) /* 分配第2个小标 */
{
if((p[i] = (int*)malloc(sizeof(int) * N)) == NULL)
{
exit(1);
}
}
for (i = 0; i < M; i++) /* 输入数据 */
{
for (j = 0; j < N; j++)
{
scanf("%d", &p[i][j]);
}
}
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
printf("%d ", p[i][j]);
}
putchar('\n');
}
getch();
return 0;
}
如上红色部分~分配第一个下标时为什么要使其返回的值是指针的指针,
我知道在二维数组中如a[ i ][ j ],a[ i ]是表示第i+1行的起始地址,
不知道你这儿使其返回值为**,也是考虑到这个意思?
还有我把
if ((p = (int**)malloc(sizeof(int*) * M)) == NULL) /* 分配第一个下标 */
{
exit(1);
}
这段删掉,程序也能顺利运行,那这段内存申请语句的存在必然性在哪儿?
最后一个问题
我前面也看了一个关于return 0和exit(0)的帖子,在你的程序中把exit(1)改成exit(0)也可以~
我也各自试了exit(0)和exit(1)好像他们的作用一样啊,都是退出当前程序。
我这儿想请教一下:
exit(1)和exit(0)有什么区别?各自在什么情况下使用?
还望各位C爱好者赐教!
畅所欲言!