C++指针学习

1. 指针即地址,指针类型的变量前面要加*,&是取变量的地址

	int a,b;
	int *p1,*p2;
	a=100;b=10;
	p1=&a;
	p2=&b;
	cout<<*p1<<" "<<*p2<<endl;//*p1是a的实际值
	return 0;
2. 值传递和引用传递

#include <iostream>
using namespace std;

/**
C++中引用传递的两种方式:*和&
引用方式更加简洁,直观
/*
函数的参数类型是指针类型,将变量的地址传给形参,
仍然是值传递的方式,只是实参的值是变量的地址
*/
void swap(int *p1,int *p2);

/*
引用传递
*/
void swap(int &,int &);
/*
值传递,并未改变传入的值
*/
void swapValue(int,int);

int main()
{
	int a=10,b=90;
	swapValue(a,b);//实际并未交换
	cout<<a<<" "<<b<<endl;
	int *p1,*p2;
	p1 = &a;
	p2 = &b;
	swap(p1,p2);
	cout<<a<<" "<<b<<endl;
	swap(a,b);
	cout<<a<<" "<<b<<endl;
	return 0;
}

void swap(int *p1,int *p2)//值传递,但是传递的变量是地址,所以也改变了值
{
	int t;
	t=*p1;
	*p1=*p2;
	*p2=t;
}

void swap(int &p1,int &p2)//引用传递,改变了值
{
	int t;
	t=p1;
	p1=p2;
	p2=t;
}

void swapValue(int p1,int p2)//值传递,没有改变原来的值
{
	int t;
	t=p1;
	p1=p2;
	p2=t;
}
3. 数组的指针

#include <iostream>
using namespace std;

int main()
{
	int a[10]={1,2};
	int *p;
	// p=a;//数组名代表数组中第一个元素的地址
	for(p=a;p<a+10;p++)//这种方式取数组值最快,不必每次都重新计算地址
	{
		cout<<*p<<" ";
	}
	cout<<endl;
	return 0;
}
二维数组:

#include <iostream>
using namespace std;

int main()
{
	int a[3][4]={1,2};
	int *p;
	for(p=a[0];p<a[0]+12;p++)//a[0]是a[0][0]的地址,a[0]是第一行数组的名字,所以是地址
	{
		cout<<*p<<" ";
	}
	cout<<endl;
	return 0;
}

4. 引用

&a如何区分是声明引用变量还是取地址操作:

如果前面有类型符,如int &a,则是引用;

如果前面无类型符,如cout<<&a,则是取地址。

/*引用的作用是为变量起一个别名*/
int main()
{
	int a=10;
	int &b=a;//声明b是a的引用,
	a++;//a的值变化了,b的值也变化了
	cout<<a<<" "<<b<<endl;
	return 0;
}

5. 指针数组

int main()
{
	char str[] = "I love China";
	cout<<str<<endl;
	string str1 = "I love China";//string是C++的STL中的
	cout<<str1<<endl;
	str1 = "abc";
	cout<<str1<<endl;
	/*定义一个字符指针变量str2,用字符串"I love China"对它初始化,实际上是把字符串的第一个元素的地址赋给str*/
	const char * str2 = "I love China";//char * 是C语言中的字符串
	//加const防止出现warning:deprecated conversion from string constant to ‘char*’
	/*输出时,系统先输出str指向的第一个字符数据,然后使str2自动加1,指向下一个字符,然后再输出一个字符,直到遇到'\0'*/
	cout<<str2<<endl;
	str2 = "2323";//可重新赋值
	cout<<str2<<endl;
	const char * name[] = {"bsic","23","sjk","wqu"};
	for(int i=0;i<4;i++)
		cout<<name[i]<<"   ";
	cout<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值