| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1222 人关注过本帖
标题:关于malloc函数~知道的近来看一下哦
只看楼主 加入收藏
工藤♀新一
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2006-5-4
收藏
 问题点数:0 回复次数:18 
关于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-05-10 10:33
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
以下是引用工藤♀新一在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不是地址你还加* 那怎么能行 想那么用得先定义
到底怎么用动态数组?

2006-05-10 10:58
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
juzhen=(int*)malloc(n*n*2);

你的juzhen在什么地方定义的

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-10 11:00
工藤♀新一
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2006-5-4
收藏
得分:0 
*(fangzhen+i)+j是地址的啊~我们书上就这么写的~
*(*(fangzhen+i)+j)就是内容了~

很高兴能和大家一起学习程序! QQ:114109098
2006-05-10 11:02
工藤♀新一
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2006-5-4
收藏
得分:0 
改过来了~juzhen应该是fangzhen

很高兴能和大家一起学习程序! QQ:114109098
2006-05-10 11:03
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
因为你定义了int *fangzhen;
fangzhen是一维指针,而不是二维指针,
printf("%d",*(*(fangzhen+i)+j))其中首先*(fangzhen+i)已经是值了,然后*(fangzhen+i)+j这也是值,你对一个值用*符号怎么可能正确?
fangzhen[i][j]这样的用法下fangzhen应该是二维数组,而与二维数组对应的就是指针的指针,即二维指针,应该定义为int **fangzhen

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-10 11:12
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
如果你不想定义int **fangzhen,那么可以用*(fangzhen + i * n + j)来代替fangzhen[i][j]

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-05-10 11:14
工藤♀新一
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2006-5-4
收藏
得分:0 
哦~~~这样啊~~谢谢楼上的了`我先去试一下

很高兴能和大家一起学习程序! QQ:114109098
2006-05-10 11:17
工藤♀新一
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2006-5-4
收藏
得分:0 

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


很高兴能和大家一起学习程序! QQ:114109098
2006-05-10 11:22
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

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




日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-10 13:04
快速回复:关于malloc函数~知道的近来看一下哦
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017876 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved