对指针初始化或赋值的规则


#include <iostream>
#include <string>
#include <vector>
using namespace std;


int main()
{
	int i = 0;
	int *p1 = &i;  /*类型匹配的对象地址*/
	int *p2 = p1;  /*同类型的另一个有效指针*/
	p1 = 0;         /*0值常量表达式*/
	p1 = nullptr;    /*0值常量表达式*/
	p1 = NULL;        /*0值常量表达式*/
	const int ci = 0;
	p1 = ci;           /*0值常量表达式*/
	p1 = &i + 6;       /*对象末的下一地址*/

	double db = 0;
	/*p1 = &dp;           类型不匹配error
	由于指针的类型用于确定指针所值对象的类型,因此初始化或者赋值时必须保持类型匹配
	*/

	void *pd = &db;
	pd = p1;
	/*void*可以保存任何类型的指针,不允许对void * 指针操作它指向的对象*/
	system("pause");
}

指针初始化规则:

  • 0常量表达式。
  • 类型匹配的对象的地址
  • 同类型的另一个有效指针
  • 另一对象末尾的下一地址

void*可以保存任何类型的指针,不允许对void * 指针操作它指向的对象

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/81195160