当前位置: 代码迷 >> C语言 >> 关于malloc函数~知道的近来看一下哦
  详细解决方案

关于malloc函数~知道的近来看一下哦

热度:335   发布时间:2006-05-10 10:33:00.0
关于malloc函数~知道的近来看一下哦

我用malloc定义一个动态数组~
#include"stdio.h"
#include"malloc.h"
main()
{int i,j,n;
int *fangzhen;
printf("Input n:");
scanf("%d",&n);
fangzhen=(int*)malloc(n*n*2);
printf("Input fangzhen:");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&fangzhen[i][j])
}
为什么编译说scanf("%d",&fangzhen[i][j])是无效间接运算~而换成
scanf("%d",*(fangzhen+i)+j)就可以了~
但输出时用printf("%d",*(*(fangzhen+i)+j))就又说运算无效~
到底怎么用动态数组?

[此贴子已经被作者于2006-5-10 10:59:19编辑过]

搜索更多相关的解决方案: malloc  函数  fangzhen  int  

----------------解决方案--------------------------------------------------------
以下是引用工藤♀新一在2006-5-10 10:33:00的发言:

我用malloc定义一个动态数组~
#include"stdio.h"
#include"malloc.h"
main()
{int i,j,n;
int *fangzhen;
printf("Input n:");
scanf("%d",&n);
juzhen=(int*)malloc(n*n*2);
printf("Input fangzhen:");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&fangzhen[i][j])
}
为什么编译说scanf("%d",fangzhen[i][j])是无效间接运算~而换成
scanf("%d",*(fangzhen+i)+j)就可以了~ 这也不对吧 *(fangzhen+i)+j你那是也不是地址啊
但输出时用printf("%d",*(*(fangzhen+i)+j))就又说运算无效~*(fangzhen+i)+j不是地址你还加* 那怎么能行 想那么用得先定义
到底怎么用动态数组?


----------------解决方案--------------------------------------------------------
juzhen=(int*)malloc(n*n*2);

你的juzhen在什么地方定义的
----------------解决方案--------------------------------------------------------
*(fangzhen+i)+j是地址的啊~我们书上就这么写的~
*(*(fangzhen+i)+j)就是内容了~

----------------解决方案--------------------------------------------------------
改过来了~juzhen应该是fangzhen

----------------解决方案--------------------------------------------------------
因为你定义了int *fangzhen;
fangzhen是一维指针,而不是二维指针,
printf("%d",*(*(fangzhen+i)+j))其中首先*(fangzhen+i)已经是值了,然后*(fangzhen+i)+j这也是值,你对一个值用*符号怎么可能正确?
fangzhen[i][j]这样的用法下fangzhen应该是二维数组,而与二维数组对应的就是指针的指针,即二维指针,应该定义为int **fangzhen
----------------解决方案--------------------------------------------------------
如果你不想定义int **fangzhen,那么可以用*(fangzhen + i * n + j)来代替fangzhen[i][j]
----------------解决方案--------------------------------------------------------
哦~~~这样啊~~谢谢楼上的了`我先去试一下
----------------解决方案--------------------------------------------------------

变成**fangzhen后果然可以了~
其实我的原题是求一个关系方阵的自反必包,传递必包和对称必包~


----------------解决方案--------------------------------------------------------

#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;
}




----------------解决方案--------------------------------------------------------
  相关解决方案