您的位置:首页 > 编程语言 > C语言/C++

C++一些基本概念总结【面向过程篇】——指针

2017-03-29 10:32 471 查看
(1)定义指针:存储类型名数据类型 *指针变量名(定义必须用*)

存储类型名:静态、栈、自动类型

数据类型:指针指向的数据类型。指针本身数据类型是unsigned long int(4位)。

如 int *p1、static int *p2、char *p3

指针变量是p而不是*p

通过指针给指向的变量赋值,如 int a=1,*pa=&a;  再赋值:*pa=2;(a变成2)



(2)指针初始化:存储类型数据类型 *指针名=初始地址值

最好初始化,哪怕初始化为空指针,如int *px=0;

使用前都必须赋值。

如 inta,*pa=&a 

or int a;      int*pa=&a;  

or int a,*pa;  pa=&a;

可以把一个已经初始化的指针赋给另一个

如 int n;  int*p1=&n;  int *p2=p1;

      px——指针变量,内容是目标的地址值

      *px——指针的目标变量,内容是数据

      &px——指针变量的存储地址

(3)指针的运算

指针加上或减去一个n没相当于指向前或者后方第n个数据的位置

如 p±n=(p)±n*sizeof(数据类型),单位是字节

 

px-py:两指针指向位置之间的数据个数,((px)-(py))/数据长度

px<py:px指向位置在py前方

px==0或px!=0判断指针是否为空指针



(4)void指针:空类型指针,不指定指针指向一个固定类型,仅仅用来存放地址

void *p

可以用任何类型的指针给void指针赋值

如:inta,*p=&a;  void *p1=p;

但是用void指针赋给别的指针,需要强制转换类型

如:int *p2=(int*)p1;

(5)const指针

const放在指针类型前:如const int *p,不能通过指针改变它指向的值,但指针可以指向其他数据

const放在*和指针名之间:如int * const p指针本身的值不可变,即指针不能指向其他数据,但它指向的数据的值可以改变

都加了:都不能改变,如const int *const p


(6)指针与数组

数组名和首地址:

一维数组如int a[10],数组名a表示该数组的首地址,即&a[0]

如 char a[10],*pa;  pa=a

or  int a[10]; int *pa=a;

二维数组如int a[2][3],a[0]表示第0行的首地址,即&a[0][0]

访问数组的方法:

下标法:a[i],a[i][j]

地址法:*(a+i),*(*(a+i)+j)

指针法:int a[10],*pa=a;  *(pa+i)就是a[i]

(7)数组指针与指针数组
数组指针:一个指向数组的指针变量

指向一维数组的指针变量:数据类型(*指针名)[常量表达式]

如int (*p)[2]定义一个指向2个元素的一维数组,用法如下

int a[2]={1,2}; 

int(*p)[2]=a;

cout<<*p[0];  //1

cout<<*(p[0]+1);  //2

指针数组:每一个元素都是指针变量,如

char *p[2]={"hello","hi"};

cout<<p[0];  //hello

cout<<p[1];  //hi

(8)指针与函数

指针作为函数参数,如

void swap(int *,int *)  //声明

void main()



    swap(&a,&b);

}

void swap(int *x,int *y)

{

    ......   //定义

}

对形参的改变会影响实参

指针型函数

函数的返回值是指针类型,数据类型 *函数名(参数表)

函数指针

数据类型 (*函数指针名)(参数表)

如 int (*p)(int,int)定义了一个函数指针p,指向一个返回值为整型,有两个整型参数的函数

给p赋值:p=fun1

(9)指向指针的指针

int i,*p=&i;

int **pp=&p;  //**表示二级指针,pp是指向指针p的指针

i=1;

i     //1

*p  //1

p   //a的地址

&p  //指针p的地址

*pp  //p的值,即a的地址

**pp  //相当于*p,即a的值1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: