指针:
指针是一个变量,存储的是一个地址,指向内存的一个存储单元;
引用:
引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;
建议:多用引用,少用指针
0.定义指针和引用
int *a=&b;//定义一个指向int类型的指针变量a,*是定义标志,&b表示取int类型变量b的地址,a指针指向b的地址
cout<<*a;//输出指针a指向地址的内容,这里的*是解引用,把指针a指向地址的内容取出来
int&a=b;//给b取一个别名a,对a的操作将直接对b产生修改,这里的&是定义引用类型的标志
//定义变量时*在类型后是定义指针的标志,如果单独出现在变量前或者出现在等号右面是解指针标记,表示获取指针指向地址内容
//定义变量时&在类型后是定义引用的标志,如果单独出现在变量前或者出现在等号右面是取地址标志,表示获取该变量的地址。
1.以下是c++primer里讲的比较好的部分
int i=42;
int &r=i;//随类型名出现,是声明的一部分,r是一个引用,引用必须初始化 ,而且必须是对象
int *p;//随类型名出现,是声明的一部分,p是一个指针
p=&i;//&出现在表达式里,是一个取地址符号
*p=i;//*出现在表达式里,是一个解引用符号
int &r2=*p;//&是声明的一部分,r2是一个引用,*是一个解引用符号
2.函数指针参数
Int b;
&b是个指针是b的地址
*a=b 表示 a指针所指向的数据,等于b
*a=&b 表示 a指针所指向的数据,等于b的地址
当一个函数定义为
int func(int *d,int num){
*d=num;//指针指向num
}
调用的时候可以
Int a;
func(&a,5)就可以把5赋值给a
当一个函数定义为
Int func(int *num,int l)//这里的num需要一个数组
调用的时候就可以
Int num[5]={0,1,2,3,4};
func(num,5)或者func(&num,5)
3.数组元素地址
int a[5];
a、&a、&a[0]都是数组第一个元素的地址
*&a等于&a
int *b; 定义一个指针类型
int a[5]={0,1,2,3,4};
b=&a[3]; 把a[3]的地址赋给b
cout<<b;就是输出这个地址
cout<<*b;就是输出这个地址的数值
4.数组指针和指针数组
.int (*arr)[3]//为数组指针,指向一个元素个数为3的int类型数组
int *arr[3]//为指针数组,只想一个元素个数为3的数组,内容是3个int类型指针
//二维数组的指针是行指针,指向第0行的首地址,虽然它的地址和第0个元素的一样,但本质是不同的
int a[][4] = {{1, 2, 8, 9},
{2, 4, 9, 12},
{4, 7, 10, 13},
{6, 8, 11, 15}};
cout<<" "<<endl;
cout<<a<<endl;//a的第0行地址
cout<<a+1<<endl;//a的第1行地址
cout<<a+2<<endl;//a的第2行地址
cout<<a+3<<endl;//a的第3行地址
cout<<a+4<<endl;//
cout<<" "<<endl;
cout<<*a<<endl;//a的第0个元素地址
cout<<*a+1<<endl;//a的第1个元素地址
cout<<*a+2<<endl;//a的第2个元素地址
cout<<*a+3<<endl;//a的第3个元素地址
cout<<*a+4<<endl;//a的第4个元素地址,等于第1行地址
cout<<" "<<endl;
cout<<*a<<endl;//a的第0行地址
cout<<*(a+1)<<endl;//a的第1行地址
cout<<*(a+2)<<endl;//a的第2行地址
cout<<*(a+3)<<endl;//a的第3行地址
cout<<*(a+4)<<endl;
cout<<" "<<endl;
cout<<*(a+1)+2<<endl;//a的第1行第2个元素地址
cout<<*(*(a+1)+2)<<endl;//a的第1行第2个元素内容
如果一个函数是bool Find(int *matrix,int row,int col,int num)需要传入二维数组
则int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
bool res=Find(*matrix,4,4,8);//用*matrix表示第0个元素地址
5.
char *str3=”haha”;
对于char数组,str是内容,&str是指针的地址,(int*)是内容的地址