一、指针变量的声明
指针也是一种数据类型,具有指针类型的变量我们称为指针变量。指针变量书用于存放单元地质的。
访问一种变量通常有两种方式,第一种通过变量名直接访问;第二种是通过指针变量间接访问。
作为一种数据类型,指针的使用也是先声明,后引用,声明指针的语法形式为:
数据类型 * 标识符;
其中*表示此处声明的变量是指针变量。数据类型可以是任意的,但指针所指向的数据类型必须和指针本身的数据类型相同。
二、与地址相关的运算符“*”和“&”
“*”指针运算符:1)在声明指针变量时使用“*”,“*”表示声明的变量是指针类型的变量;2)在引用时使用“*”表示读取指针指向的内存单元存储的内容。
“&”取址运算符:在给指针变量赋值时使用,表示读取该内存单元的地址。
三、指针的赋值
定义一个指针,我们只是得到了一个指针变量,并不明确该指针指向哪个内存单元。所以要对指针变量进行赋值之后,才能正常使用。
赋值的两种方法:
(1)在定义指针的同时进行初始化赋值,语法形式为:
存储类型 数据类型 * 指针名=初始地址;
const int* ptr = & a;
(2)在定义之后,单独给指针赋值:
指针名=地址。
例:
#include<iostream>
using namespace std;
int main()
{
int i;
int* ptr = &i;
i = 10;
cout << "i=" << i << endl;
cout << "*ptr=" << *ptr << endl;
return 0;
}
关于指针的类型,还应注意:
(1)声明指向常量的指针,但不能通过指针来修改所指向对象的值,但指针本身可以改变它所指向的对象
int a;
const int* ptr = &a;
int b;
*ptr = b;//错误,不能通过ptr来修改所指向对象的值。
ptr = &b;//正确,可以修改ptr指向的对象。
(2)声明指针类型的常量,这时指针本身的值不能被改变
int a;
int *const ptr;
ptr = &a;
int b;
ptr = &b;//错误,ptr是指针常量,值不能被改变。
(3)void类型指针的使用。前文提到指针只能指向和指针同类型的变量,但void类型的指针可以指向任何类型的变量,经过试用类型显示转换,通过void类型的指针可以访问任何类型的数据。
#include<iostream>
using namespace std;
int main()
{
void* ptr;
int i = 5;
ptr = &i;
int* p = static_cast<int*>(ptr);
cout << "*p=" << *p << endl;
return 0;
}