指针浅谈

回首谭浩强《C++程序设计》,第二篇,来说下指针。

主要介绍的是:①指针与引用在函数参数传递时的比较。②指针与数组的关系。

⑴函数可以说是任何程序设计语言必不可少的组成部分。一种语言如果会有更好的机制来支持函数实现,可以说该种语言就会有更大的生机。(一家之言)

C++函数的参数传递有三种方式:①值传递②指针传递③引用传递。以下的代码中调换两数的函数中,swap_1()用的是值传递方式、swap_2()用的是指针

传递方式、swap_3()用的是引用传递方式。从测试结果可以看出只有swap_1()没能对换两数。

代码如下:

  1. #include<iostream>
  2. using namespace std;
  3. void swap_1(int a,int b)
  4. {
  5. int temp;
  6. temp=a;
  7. a=b;
  8. b=temp;
  9. }
  10. void swap_2(int *a,int *b)
  11. {
  12. int temp;
  13. temp=*a;
  14. *a=*b;
  15. *b=temp;
  16. }
  17. void swap_3(int &a,int &b)
  18. {
  19. int temp;
  20. temp=a;
  21. a=b;
  22. b=temp;
  23. }
  24. int main()
  25. {
  26. int a1=3,b1=6;
  27. int a2=3,b2=6;
  28. int a3=3,b3=6;
  29. cout<<"值传递:";
  30. swap_1(a1,b1);
  31. cout<<a1<<" "<<b1<<endl;
  32. cout<<"指针传递:";
  33. swap_2(&a2,&b2);
  34. cout<<a2<<" "<<b2<<endl;
  35. cout<<"引用传递:";
  36. swap_3(a3,b3);
  37. cout<<a3<<" "<<b3<<endl;
  38. return 0;
  39. }
#include<iostream>
using namespace std;

void swap_1(int a,int b)
{
	int temp;

	temp=a;
	a=b;
	b=temp;
}

void swap_2(int *a,int *b)
{
	int temp;

	temp=*a;
	*a=*b;
	*b=temp;
}

void swap_3(int &a,int &b)
{
	int temp;

	temp=a;
	a=b;
	b=temp;
}

int main()
{
	int a1=3,b1=6;
	int a2=3,b2=6;
	int a3=3,b3=6;

	cout<<"值传递:";
	swap_1(a1,b1);
	cout<<a1<<" "<<b1<<endl;

	cout<<"指针传递:";
	swap_2(&a2,&b2);
	cout<<a2<<" "<<b2<<endl;

	cout<<"引用传递:";
	swap_3(a3,b3);
	cout<<a3<<" "<<b3<<endl;

	return 0;
}

测试结果:

分析如下:①值传递只是实参向形参传递了一个拷贝,在swap_1()中对局部变量a,b的操作不会影响实参。②指针传递是将实参的地址传递给形参了,

那么形参就可以通过地址来操作实参的内存,以及数据。所以可以调换。③调用swap_3()时系统向形参传递的是实参的地址而不是其值。

形参变成了实参的引用,所以也可以对换。

然而,可以说引用传递比指针传递更加好一点。第一,引用传递代码更加简洁、通俗。第二,引用传递的形参只是实参的引用,不会生成临时变量。

小疑问:书上说:指针传递实际也是中值传递,因为实参的值是变量的地址。那么引用传递不也是传地址的吗?这样不也就可以说引用传递也是值

传递了?不解!

⑵指针与数组的关系。

数组名代表的是该数组存储空间的首地址,这或许也就注定数组与指针的千丝万缕的联系。

①指针与一维数组。

这是比较简单的情况。主要就是数组的访问方式:下标法和指针法。如a[i]形式和*(a+i)的形式。其次,用指针和自增自减运算符结合访问数组

也是种比较简便的方式。

②指针与二维数组。

这就相对复杂了。因为二位数组的每个元素都是一维数组,访问起来就较为繁琐。

例如:int a[4][4],数组名a依旧代表的是数组的首元素地址,但此时的首元素已不是一个整型变量了,而是一个含有四个整型变量的一维数组了。

所以,定义int *p=a,编译就会出错,p只能指向一个整型变量,而不是一个一维数组;可以这样赋值p=a[0]或p=&a[0][0],此时如果要访问

a[i][j]则可以用*(*(p+i)+j)。int (*q)[4]=a,是正确的。此时的q是一个指针变量,它指向包含四个整型变量的一维数组。


内容概要:本文详细探讨了双馈风力发电机(DFIG)在Simulink环境下的建模方法及其在不同风速条件下的电流与电压波形特征。首先介绍了DFIG的基本原理,即定子直接接入电网,转子通过双向变流器连接电网的特点。接着阐述了Simulink模型的具体搭建步骤,包括风力机模型、传动系统模型、DFIG本体模型和变流器模型的建立。文中强调了变流器控制算法的重要性,特别是在应对风速变化时,通过实时调整转子侧的电压和电流,确保电流和电压波形的良好特性。此外,文章还讨论了模型中的关键技术和挑战,如转子电流环控制策略、低电压穿越性能、直流母线电压脉动等问题,并提供了具体的解决方案和技术细节。最终,通过对故障工况的仿真测试,验证了所建模型的有效性和优越性。 适用人群:从事风力发电研究的技术人员、高校相关专业师生、对电力电子控制系统感兴趣的工程技术人员。 使用场景及目标:适用于希望深入了解DFIG工作原理、掌握Simulink建模技能的研究人员;旨在帮助读者理解DFIG在不同风速条件下的动态响应机制,为优化风力发电系统的控制策略提供理论依据和技术支持。 其他说明:文章不仅提供了详细的理论解释,还附有大量Matlab/Simulink代码片段,便于读者进行实践操作。同时,针对一些常见问题给出了实用的调试技巧,有助于提高仿真的准确性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值