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
存储类型名:静态、栈、自动类型
数据类型:指针指向的数据类型。指针本身数据类型是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
相关文章推荐
- C++一些基本概念总结【面向过程篇】——数组
- C++一些基本概念总结【面向过程篇】——函数
- C++一些基本概念总结【面向过程篇】——编译预处理
- C++一些基本概念总结【数据表达篇】
- C++基本概念总结——引用和指针
- 关于网络处理的一些基本概念(有一些过程)
- C++中的一些基本概念,很基础,但很重要!
- C++基本概念总结——公有继承和私有继承
- C/C++基础知识:函数指针和指针函数的基本概念
- C++基本概念总结——构造函数的public/protected/private语义
- Mail的一些基本概念总结
- C++基本概念总结——const 和 非const
- C++基本概念总结——声明(declaration)和定义(definition)
- C++基本概念总结——静态成员
- C++基本概念总结——重载(overload)和重写(override)
- C++中与指针有关的一些概念
- C++面向对象基本概念
- 有必要澄清两个基本概念--算法和过程的关系以及关于程序设计方法论的一些看法
- 读书摘要 C primer plus 指针的基本用法和一些需要清楚的概念(1)
- C/C++基础知识:函数指针和指针函数的基本概念