我用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定义一个动态数组~
#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;
}
----------------解决方案--------------------------------------------------------