指针的用法有很多,包括间接引用,和数组的结合,和函数的结合等,在此说明下在学习过程中碰到的指针*和常量const的结合。
- 指针最基本的用法就是指向一个已知的变量
指针存放的为数据的地址,*代表解引,是取变量存储的地址指向的值,&为取地址符,是取变量的地址,见下例
//定义一个整型变量与指针并指向他
int num;
int *p = #//*p为一个指针变量,&a为把a的地址取出放进p里
//指针的类型代表了他指向的数据类型
eg:
char a;
char *p;//给p赋初值的另一种方法
p = &a//此时p指向的就是一个char型的数据
2.指向常量的指针
可以将指针定义为指向常量,这意味着不能通过指针修改它所引用的值。
但是我们可以改变指针所存取的地址
//定义格式
const int num = 50;
int *pi;
pi = #
这样做,更改指针所引用的值是错误的
//更改指针所引用的值
const int num = 50;
int *pi = #
*pi = 50;
//这样是错误的
//报错
you cannot assign to a variable that is const
这样是可以的,更改指针指向的地址
//更改指针指向的地址
const int num = 50;
int data = 2;
int *pi = #
pi = &data;
//这样是可以的
3.指向非常量的常量指针
我们可以声明一个指向非常量的常量指针,我们不能改变它所指向的地址,但我们可以改变它所指向地址中的值
//定义
int num;
int *const pi = #
这样做是合法的
//改变它所指向地址的数据
int num = 2;
int *const pi = #
*pi = 5;
这样做是非法的
//改变它所指向的地址
int num = 2;
int data = 5;
int *const pi = #
pi = &data;
//这样做是非法的
4.指向常量的常量指针
顾名思义,是一个指向常量的常量指针,指针指向的地址和指针指向地址里的值都不能改变。很少用。定义如下
//指向常量的常量指针
const int num = 2;
const int *const pi = #//声明指针时必须初始化
//如果这样则会报错
const int num = 2;
const int *const pi;
pi = #
//错误