C++指针
来源:互联网 发布:linux内核开发教程 编辑:程序博客网 时间:2024/06/06 04:55
1、可以声明void类型指针,但不能声明void类型变量。
2、void类型指针可指向别的数据类型变量
3、void指针赋值其他数据类型指针需要强制类型转换
例:void *pv; int*print; print=(int *)pv;
4、指针算数运算,其加减为地址的加减。指向下一个or前一个数据。
5、指向数组元素的指针
例:int a[10],*pa; pa=&a[0];或pa=a;· a[i], *(pa+i), *(a+i), pa[i]是等效的。
· a是数组首地址常量。
6、指针数组
①一维数组
例:利用指针数组输出单位矩阵
#include<iostream.h>void main(){int line1[]={1,0,0};int line2[]={0,1,0};int line3[]={0,0,1};int *p_line[3];//声明指针数组p_line[0]=line1;//地址赋值p_line[1]=line2;p_line[3]=line3;for(int i=0;i<3;i++){for(int j=0;j<3;j++) //*p_line[i]+1可以写成*p_line[i][1],看第5项。{cout<<p_line[i][j]<<" ";}cout<<endl;}}
②二维数组
例:指针数组输出二维数组
#include<iostream.h>void main(){int array2[2][3]={{11,12,13},{21,22,23}};for(int i=0;i<2;i++){cout<<*(array2+i)<<endl;//会输出一段地址,*(array2+i)是行地址。for(int j=0;j<3;j++)cout<<*(*(array2+i)+j)<<" ";//表示数组元素值cout<<endl;}}
7、指针与常量
①指向常量的指针(指向的地址可以改变,指向的对象不能通过指针改变,因为指向的是常量呀。)
不能通过指针来改变对象的值,但指针本身可以指向另外的对象。
例1:const int n2=5;const int *pn=&n2;*pn=6//错误,不能通过指针更改对象值例2:const char *name1="john";char s[]="abc";name1=s;//对,可以指向另外的对象*name1='1'//错,不能通过指针更改对象值,john不能更改成1。
例:指向常量指针做形参。
#include<iostream.h>const int N=6;void print(const int *p,int n);//这里用指向常量的指针,其实用一般指针也成立。void main(){int array[N];for (int i=0;i<N;i++)cin>>array[i];//输入一维数组array[6]print(array,N);//const int *p=array;指向对象array}void print(const int *p,int n)//以指针输出数组{cout<<"{"<<*p;for(int i=1;i<n;i++)cout<<","<<*(p+i);cout<<"}"<<endl;}②指针常量(指向的地址不能改变,但是可以通过指针去改变(指向的是变量),如果指向常量就又不能改变了。)
int n1=3;const int n2=5;int *const pn=&n1;pn=&n2;//错误,地址确定了不能改变了。*pn=6;//正确,可以通过常指针改变量n1的值。
8、指向类类型对象的指针
通过指针访问对象成员
对象指针名->成员名
void main(){Point A(5,10);Point *ptr;ptr=&A;int x;x=ptr->GetX();//x=A.GetX();cout<<x<<endl;}
9、指针和引用的区别
主要区别是引用是引用内容的别名,不可以改变;指针是指向内容所在地址,非常指针是可以改变地址指向的。
10、指向指针数组的指针:二级指针。
#include<iostream.h>//Point类省略void f(Point **a,int n)void main(){Point *pa[2];pa[0]=new Point(1,3);pa[1]=new Point(2,4);f(pa,2);delete pa[0];delete pa[1];}void f(Point **a,int n)//也可以写成void f(Point *a[],int n),指的是地址嘛{for(int i=0;i<n;i++)cout<<a[i]->GetX()<<endl;//这里调用a[i]->GetX,回顾,如果是Point *a;则(*a).GetX()或者a->GetX();}
11、指针型函数
当函数的返回值是地址时,该函数就是指针型函数。
声明形式:存储类型 数据类型 *函数名();
指向函数的指针:声明形式:存储类型 数据类型 (*函数指针名)();
0 0
- C指针的指针
- c 指针的指针
- C--指针
- C-指针
- C指针
- C指针
- C指针
- C---指针
- c 指针
- C指针
- C指针
- C指针
- C 指针
- c指针
- C指针
- C 指针
- C 指针
- C 指针
- 逃离迷宫-----广搜+dp
- magento 开启 template path hints
- Zstack之RSSI信号值获取以及显示
- 吝啬的国度(深搜+vector)
- 没有什么,开发ASP.NET时随便写写
- C++指针
- 学习总结二十一:Hbase集群搭建
- 21天学通Java学习笔记-Day12(MYsql-JDBC)
- 使用scipy进行聚类
- struts.xml中package的namespace属性
- 访问google的办法之一
- obj-c编程17:键值观察(KVO)
- uva10561 - Treblecross SG定理
- 数据库中视图的作用