今日笔记:C++,函数的参数使用结构体,一种是直接引用&,另一种是指针 *

定义的结构体如下:
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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jasscical

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值