(c/c++学习)指针

指针使用

int *p1;//定义一个指向整形的指针,名字是p1
char * p2;//定义一个指向字符的指针,名字是p2

  1. 如果有“int *p”,指针变量名是p,而不是* p。

  2. 在定义指针变量时必须明确其指向的数据类型。

  3. 在C++中,通过在指针变量前加*的方法来取地址中的数据。

初始化指针和指针赋值

int a,*p=&a; //a前面的取地址运算符一定不可少
int *q=p; //这里p的指针指向的地址赋值给q,p就是地址名

  1. 指针变量也是有地址的,p如果是指针,&p即为这个指针的地址

指针的运算

  • 指针的运算就是地址的运算

  • 将指针p加上或者减去一个整数n,表示p向地址增加或减小的方向移动n个元素单元,从而得到一个新的地址,以便能够访问新地址中的数据。

  • 每个数据单元的字节数取决于指针的数据类型。

int *p=&a;

*(p+1) //p+1地址下的值

*p+1 //p地址下的值加一

指针与数组

  • 对于一个数组来说,数组的名称就是这个数组的首地址。同时数组名就是一个指针变量。

int array[10]; //定义array为包含10个整型数据的数组

int *p; //定义p为指向整型变量的指针变量

p=&array[0]; //对该指针赋值 或者p=array; “p=array”表示指针变量p被初始化为array的首地址

  • 二维数组元素值在内存中是按行的顺序存放

a[i]可表示一维数组 (a[i][0],a[i][1],…,a[i][n])的首地址&a[i][0]

a[i]=*(a+i)=&a[i][0]

指针与字符串

char *p=″how are you? ″; //存储在字符数组中的字符串不能直接支持字符串间的赋值和连接

以结束符号‘\0’为结束

​ char str[20]={“how are you?”};//数组声明只能一个一个赋值

​ char * array =“how are you?”; //字符指针赋值

指向指针的指针

  • 运算符具有右结合性,*p相当于*(*p)

const指针

​ const int * p1;//p1是一个指向整型常量的指针,该指针指向的值是不能改变的。

​ int * const p2;//p2也是一个指向整型常量的指针,它指向的整数是可以改变的,但是p2这个指针不能指向其他的变量。

void指针

void指针类型,可以用来指向一个抽象类型的数据,在将它的值赋给另一个指针变量时,要进行强制类型转换使之适合于被赋值的变量的类型。

发布了136 篇原创文章 · 获赞 18 · 访问量 4201

猜你喜欢

转载自blog.csdn.net/xcdq_aaa/article/details/105050297