c语言中定义一个动态一维数组的函数,然后在主函数中使用

voidarray1(intx,int*a){a=(int*)malloc(sizeof(int)*x);if(a==NULL)exit(0);for(inti=0;i<... void array1(int x,int *a)
{
a=(int*)malloc(sizeof(int)*x);
if(a==NULL)
exit(0);
for(int i=0;i<x;i++)
*(a+i)=0;

}
这个是分配内存函数并赋值
void main()
{ void array1(int x,int *a);
int *ff;
array1(sdof,*ff);
for(int i=0;i<sdof;i++)
printf("%d\n",*(ff+i));
}

初学C不知哪里的问题
打家帮帮忙
展开
 我来答
有钱买不起房子
2011-08-06 · TA获得超过4326个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2086万
展开全部
如果要获取内存地址,你上面那种函数获取方法是错误的.函数中int *a仅仅是主函数变量ff的一个副本,ff当初没有具体指明地址,传递给a也是不确定地址,a分配完毕,只是修改a自身指向,并不修改ff指向.所以用下面方法进行修改,采用返回地址方法
#include <stdio.h> //包含头文件
#include <stdlib.h>

int *array1(int x)//使用返回指针能正确分配内存地址
{
int *a;
a=(int*)malloc(sizeof(int)*x);
if(a==NULL)
exit(0);
for(int i=0;i<x;i++)
*(a+i)=0;

return a;

}

void main()
{
int *array1(int x);//函数声明与函数定义相一致
int *ff;

int sdof;//定义sdof

sdof=8;

ff = array1(sdof);
for(int i=0;i<sdof;i++)
printf("%d\n",*(ff+i));
}
百度网友1fc36d4
2011-08-06 · TA获得超过3131个赞
知道大有可为答主
回答量:1497
采纳率:100%
帮助的人:1826万
展开全部
像你这种需要通过传参并对实参分配空间,需要传指针的地址。

#include "stdio.h"
#include "stdlib.h"

void array1(int x, int **a)/*形参也是指向指针的指针*/
{
int i;
*a = (int*)malloc(sizeof(int) * x);/*对指向指针的指针解引用,给其赋分配空间的地址值*/
if (*a == NULL)
exit(0);
for (i = 0; i < x; i++)
* ((*a) + i) = i;
}

int main()
{
void array1(int x, int**a);
int *ff, sdof = 10, i;/*sdof总得给个值*/

array1(sdof, &ff);/*此处实参使用&,传入指针ff的地址*/
for (i = 0; i < sdof; i++)
printf("%d\n", *(ff + i));

system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zero_fn
2011-08-06 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:457万
展开全部
void array1(int x,int **a) //要修改原指针就要用二级指针
{
int i;
*a=(int*)malloc(sizeof(int)*x);
if(a==NULL)
exit(0);
for(i=0;i<x;i++)
*(*a+i)=0;
}
int main(int argc, char *argv[])
{
int *ff,sdof=10,i;
array1(sdof,&ff); //要用传址调用
for(i=0;i<sdof;i++)
printf("%d\n",*(ff+i));

system("PAUSE");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-08-06
展开全部
void array1(int x,int *a)
{ if(a==NULL)
exit(0);
for(int i=0;i<x;i++)
*(a+i)=0;

}
int main()
{ void array1(int x,int *a);
int *ff,sdof=10;
ff=(int*)malloc(sizeof(int)*sdof);
array1(sdof,ff);
for(int i=0;i<sdof;i++)
printf("%d\n",*(ff+i));
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式