定义的结构体如下:
typedef struct
{
int n; // the size of the array
double *pData; // the data of the array
}DArray;
第一种:直接引用&
例子如下:
int SetValue(DArray& a,int k, double dValue)
{
if(a.pData==NULL)
{
printf("no enough memory!");
return 0;
}
a.pData[ k ] = dValue;
return 1;
}
主函数调用:
DArray pa;
SetValue(pa,0,1.0);
理解:a 是结构体DArray 的一个对象,作为参数,可以调用结构体中的 n,pData
调用方式用实例化(或者叫做引用)的对象 a.n 或者 a.pData
第二种:指针 *
例子如下
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;
}
主函数调用:
DArray pa;
SetValue(&pa,0,1.0);
理解:指针a是DArray类型的指针,记住指针指向的是地址,a指向DArray结构体的内容的方式是:a->n,a->pData
当然缺失了部分代码,为方便理解贴上完整代码,想专研可以看一看。
第一种&的代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int n; // the size of the array
double *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 );
int 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);
return 0;
}
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;
}
第二种 * 代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int n; // the size of the array
double *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()
{
printf("set pa:\n" );
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);
printf("set pb:\n" );
DArray pb;
InitArray( &pb );
SetArraySize( &pb, 4 );
SetValue( &pb, 0, 1.0 );
SetValue( &pb, 1, 2.0 );
SetValue( &pb, 2, 3.0 );
SetValue( &pb, 3, 4.0 );
PrintArray(&pb);
FreeArray(&pb);
}
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;
}