JAVA程序员学习C++之指针

1.指针定义

指针变量存储变量内存中的起始地址,相当于Java中的引用。由于仅仅存储了内存的起始地址,所以要正确的存取指向数据,还必须知道数据所占用的字节数,所以声明指针时还必须声明类型。

指针的声明方式为:

类型   *变量名;

比如: int *p; float  *p1;


1.1 为指针赋值

为指针型变量赋值使用运算符&(获取变量在内存中的地址),如下式:

int a=5,*pointer;

pointer = &a;

当然两个指针型变量可以相互赋值:

int *pointer2=NULL;

pointer2 = pointer;

void main()
{
	int y=15, *ip;
	ip = &y; <span style="white-space:pre">	</span>//其中ip是int型的指针类型,存放了指向数据(y)的首地址
	cout << "ip=" << ip << " &y=" << &y << "  *ip=" << *ip;
	cout << "\n";
	*ip = 10;<span style="white-space:pre">	</span>//*p是指针声明的指向数据类型即int型,所以可以直接赋值
	cout << "&y=" << &y << " y=" << y << "  *ip=" << *ip;
}

打印结果:

ip=00A2FC40 &y=00A2FC40  *ip=15
&y=00A2FC40 y=10  *ip=10





在C++中结构体和类变量的赋值操作对应的是对象间的浅拷贝,这一点和JAVA不同(JAVA中赋值就是引用地址的变化),如果使用指针可以做到和JAVA一样的赋值效果

struct student{
	char name[20];
	char id[10];
	int age;
	float score;
};

void main()
{
	student st1, st2, *prst, *prst2;
	st1.age = 10;
	st2 = st1;//对象间的浅拷贝
	st2.age = 12;
	prst = &st1;
	prst2 = &st2;
	cout << "prst=" << prst << " prst2=" << prst2;//地址不同
	cout << " st1.age=" << st1.age << " st2.age=" << st2.age << "\n";//值也不同

	prst->age = 12;
	cout << "st1.age=" << st1.age << " prst.age=" << prst->age << "\n";//值相同
}

输出结果:

prst=0091FD88 prst2=0091FD58 st1.age=10 st2.age=12
st1.age=12 prst.age=12


1.2 函数指针

在C++中指针同样可以指向函数。函数指针最大的作用是把一个函数作为参数传递给另一个函数。如下例所示:

#include <iostream>
using namespace std;

int add(int a, int b){
	return a + b;
}

int subtraction(int a,int b){
	return a - b;
}
/*
*形参为函数指针类型
*/
int operation(int x, int y, int(*mfun)(int, int)){
	return (*mfun)(x,y);//调用函数mfun
}

void main(){
	//声明函数指针minus指向subtraction
	int(*minus)(int, int) = subtraction;
	int m, n;
	m = operation(4, 5, add);
	n = operation(20, m, minus);
	cout << n;
}

输出结果为:

11













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值