又一个问题:知道的进来看看,谢谢

lswx 2004-11-08 03:57:02
问题1===>
我在f:\c_history目录下没有sort.c 和sort.exe,在i:\temp下存在这两个文件,但是,我在dos下f:\c_history目录下输入sort 回车,没有出现 无效的命令或什么提示,画面就停在那里,我重起了一下机子,还是没有变化?为什么?

问题2===>
#include <stdio.h>

int main(void)
{
int i;
int j;
int row_x;
int row_y;
int **p;
int elem_num;



printf("please enter row_x maximum number :");
scanf("%d", &row_x);
printf("please enter row_y maximum number :");
scanf("%d", &row_y);
elem_num = row_x * row_y;


1===> p = (int **)malloc(elem_num * sizeof (int ));
if (!p)
{
printf("memory malloc failed\n");
return -1;
}
for(i=0; i<row_x; i++)
{
2===> p[i] = (int *)malloc(row_y * sizeof (int *));
if (!p[i])
{
printf("memory malloc failed\n");
return -1;
}
}


for (i=0; i<row_x; i++)
{
for (j=0; j<row_y; j++)
{
p[i][j]=1;
}
}


for (i=0; i<row_x; i++)
{
for (j=0; j<row_y; j++)
{
printf("%3d", p[i][j]);
}
printf("\n");
}

free(p);
p = NULL;

return 0;
}
如果1处和2处的p是char型,即char **p;
那么1,2处的sizeof()括号里应该怎么写??有什么含义?我是初学者,每个问题对我来说都是一个巨大的困难,我努力想弄明白他们,这样才能以后更好的学习,请各位多多帮忙!谢谢

...全文
277 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
harvey93 2004-11-10
  • 打赏
  • 举报
回复
4242 唉唉~
myblind 2004-11-09
  • 打赏
  • 举报
回复
来晚了。
harvey93 2004-11-09
  • 打赏
  • 举报
回复
1==> p = (int **)malloc(elem_num * sizeof (int *));//写成sizeof(int *) 因为这里分配的空间是一个指针数组,而且p是指向指针的指针,
2==>p[i] = (int *)malloc(row_y * sizeof (int)); 分配的空间是int数组
3==>释放每个p[i]指向的数组
4==>释放所有p[i]本身所占用的空间
所以3步有必要,4步不能代替3
lswx 2004-11-09
  • 打赏
  • 举报
回复
谢谢各位的帮助!
fitman731 2004-11-08
  • 打赏
  • 举报
回复
3.sizeof()括号内是可写内型或变量名,说明这个变量或内型所占空间大小,你写sizeof(int)在16位机里是2个字节的内存空间,32里面是4字节空间,sizeof(int*)的值和sizeof(int)一样,但是意义不同,sizeof(int*)说明一个整形指针所占内存大小,sizeof(char)为1字节,sizeof(char*)=sizeof(int*)他们2都是一个指针所占内存空间。
3处的free不能不要,他对应你2处的p[i]在堆空间中申请的数组,必须在3处用free释放
4。char *a (xx,xx)是一个指针函数,其说明函数的返回直是一个字符指针
char (*a) (xx,xx)是一个函数指针,他表示指向内存代码区中一个函数地址的指针。

lsf1234567 2004-11-08
  • 打赏
  • 举报
回复
问题4:a函数应该是一个指针函数!
lswx 2004-11-08
  • 打赏
  • 举报
回复
====>int main(void)
{
write();
====> return 0;
}
箭头处为你要修改的地方
jiangqiaohua 2004-11-08
  • 打赏
  • 举报
回复
我的很多代码
比如
#include<stdio.h>
void write()
{
int i,j;
int a[4][4]={{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}};

for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%3d",a[i][j]);
printf("\n");
}

}

void mian()
{
write();
}

编译可以通过
在运行时会连接错误
这是为什么呢
lswx 2004-11-08
  • 打赏
  • 举报
回复
问题3!===>

#include <stdio.h>

int main(void)
{
int i;
int j;
int row_x;
int row_y;
int **p;
int elem_num;



printf("please enter row_x maximum number :");
scanf("%d", &row_x);
printf("please enter row_y maximum number :");
scanf("%d", &row_y);
elem_num = row_x * row_y;

/* malloc */
1====> p = (int **)malloc(elem_num * sizeof (int ));
if (!p)
{
printf("memory malloc failed\n");
return -1;
}
for(i=0; i<row_x; i++)
{
2====> p[i] = (int *)malloc(row_y * sizeof (int));
if (!p[i])
{
printf("memory malloc failed\n");
return -1;
}
}

/* operation */
for (i=0; i<row_x; i++)
{
for (j=0; j<row_y; j++)
{
p[i][j]=1;
}
}

for (i=0; i<row_x; i++)
{
for (j=0; j<row_y; j++)
{
printf("%3d", p[i][j]);
}
printf("\n");
}
/* free */
3====> for(i=0; i<row_x; i++)
{
free(p[i]);
p[i] = NULL;
}
4====> free(p);
p = NULL;

return 0;
}
以上为一个简单的申请二维数组的代码
1,2处的sizeof()括号里面应该怎么写?我的意思是什么时候写sizeof(int),什么时候写sizeof(int *),3处的free有没有必要,如果删除3处所有代码,通过4处的代码,能实现free掉整个内存?


问题4!===〉
int main(void)
{
a(xx,xx);
}
char *a (xx,xx)
{...
}
请问函数名a前的指针符有什么用,说明了什么,去掉有影响??一般在什么情况下这样用??
jitian81411 2004-11-08
  • 打赏
  • 举报
回复
你要存储什么类型的数据就写什么
比如你要申请一个内存空间来存储一组数据
int p[40];
那么你需要的空间就是40*sizeof(int)
ipgk 2004-11-08
  • 打赏
  • 举报
回复
1、sort.exe 跟系统自带程序重名在system32目录下.
2、这还用问?sizeof(char),sizeof(char *),sizeof表示一个类型占空间大小,括号内可为类型标识符或变量名。
ivorstar 2004-11-08
  • 打赏
  • 举报
回复
问题1:sort是windows下的一个命令啊,跟你的i:\temp的sort.exe没什么关系,也不是画面停在那里,你输入几个数字,然后按Ctrl + C,真的会给出排序结果。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧