指针初始化和分配进度:
指针初始化和赋值
指针变量初始化
语法形式
存储类型数据类型*指针名称=初始地址
示例:
int *pa=a;
注意事项
如果将变量地址用作初始值,则该变量必须在指针初始化之前声明,并且变量类型必须与指针类型匹配。
可以使用已经有有效值的指针初始化另一个指针变量。
请勿使用内部非静态变量初始化静态指针。
指针变量的赋值运算
语法形式
指针名称=地址
注:“地址”中存储的数据类型必须与指针类型匹配
分配给指针变量的值必须是地址常量或变量,不能是普通整数。 例如,以下情况:
求出地址运算“”中定义的变量和对象的起始地址
动态内存分配成功时返回的地址
异常:整数0可以分配给指针,表示空指针。
可以定义或声明指向void类型的指针。 可以为该指针分配任何类型的对象的地址。
示例: Void *常规;
指针nullptr
以前用0或NULL表示空指针的问题:
C/C空宏是一个具有许多潜在错误的宏。 因为某些库将其定义为整数0,而其他库则定义为(void* ) 0。 在c的时代没关系。 但是在c的时代,这引起了很多问题。
C 11是使用nullptr关键字的空指针,该指针更准确,类型更安全
示例6-5定义、分配和使用指针
//6_5.cpp
#包含
用户命名空间STD;
int main () )。
int i; 定义//int类型数I
int *ptr=i; 获取//I的地址并分配给ptr
i=10; //int型数赋值初始值
cout 'i=' i endl; //输出int型数值
cout '*ptr=' *ptr endl; //输出int型指针指向的地址内容
返回0;
}
执行结果:
i=10
*ptr=10
示例6-6使用void类型指针
#包含
用户命名空间STD;
int main () )。
//! 语音语音对象; 错了。 无法声明void类型的变量
void *pv; //是的,可以声明void类型的指针
int i=5;
pv=i; //void型指针指向整数变量
int*pint=static_castint*(PV; //void指针转换为int指针
cout '*pint=' *pint endl;
返回0;
}
指向常量的指针
您不能更改指向常量的指针所指向的对象的值,但指针本身可以更改,也可以指向另一个对象。
范例
int a;
常数int * P1=a; //p1是指向常量的指针
int b;
p1=b; //正确,p1自身的值可以改变
*p1=1; //编译时发生错误,无法更改p1中指向的对象
指针类型常数
声明指针常数时,不能更改指针本身的值。
范例
int a;
int * const p2=a;
p2=b; //错误,p2是指针常数,不能改变值