为了账号安全,请及时绑定邮箱和手机立即绑定

如下程序中,&a 替换为a,为什么报错:

如下程序中,&a 替换为a,为什么报错:

C
翻阅古今 2022-12-16 17:13:49
#include <stdio.h>#include <stdlib.h>typedef struct{int n; // the size of the arraydouble *pData; // the data of the array}DArray;//double pData[100];int InitArray( DArray &a );int SetArraySize(DArray &a, int size );int FreeArray(DArray &a );int SetValue( DArray &a, int k, double value );int PrintArray(DArray &a );void main(){DArray pa;InitArray( pa );SetArraySize( pa, 3 );SetValue( pa, 0, 1.0 );SetValue( pa, 1, 2.0 );SetValue( pa, 2, 3.0 );PrintArray(pa);FreeArray(pa);}int InitArray( DArray &a ){a.n = 0;a.pData = NULL;return 1;}int SetArraySize( DArray &a, int size ){a.n = size;a.pData = (double*)malloc( size * sizeof(double) );if( a.pData == NULL ){printf("no enough memory!\n");return 0;}return 1;}int FreeArray(DArray &a){if( a.pData != NULL ){free( a.pData );a.pData = NULL;}return 1;}int SetValue( DArray &a, int k, double value ){if( a.pData == NULL )return 0;if( k<0 || k>=a.n ) return 0;a.pData[ k ] = value;return 1;}int PrintArray(DArray &a){if(a.n==0) return 0;if( a.pData == NULL )return 0;for( int i=0; i<a.n; i++) {printf("%lf \n", a.pData[i] );}return 1;}
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

函数的定义,其参数必须是一个变量或者常量,而取址符&只是说明一个变量的地址,并不是这个变量的本身,所以你的程序中除主函数以外的所以函数的定义都不正确,就第一个函数InitArray,其定义说明应改为:

int InitArray( DArray *a )
{
a->n = 0;
a->pData = NULL;

return 1;
}
其他各函数仿此修改即可

查看完整回答
反对 回复 2022-12-21
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

没有仔细看你的代码,
应该是传统的值传递和地址传递的问题吧。

查看完整回答
反对 回复 2022-12-21
  • 2 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信