12-指针02

发布时间 2023-03-24 23:47:09作者: Icer_Newer

指针

1.野指针

野指针的指向的地址是随机的,不能操作野指针
指针指向的地址是系统分配的,定义变量的时候向系统申请,系统进行分配
指针初始化的地址不能由自己给出

#include <stdio.h>
#include <stdLib.h>
#include <string.h>

int main()
{
	
	// 野指针是指没有初始化(赋值)的指针
	
	int *p; // 定义一个指针变量p   
	// *p 指向的是指针变量存储的地址对应的空间
	// 指针变量p没有存储地址,所以p中存储的地址是随机的(指针的指向是随机的)
	// 将这样没有初始化的指针称之为野指针
	*p = 200;
	
	system("pause");
	return 0;
}

2.零指针

  • int *p = NULL -- 表明定义了一个指针,并将其初始化为NULL,就是指向0所在的地址0x0000 0000;
  • 零指针初始化所指向的位置不用于存储其他的地址,只是表明该指针进行了初始化,可以进行使用的标志
  • 习惯:将指针使用完之后,置为NULL,这样在使用指针的时候,判断指针指向为NULL,那么该指针可以进行使用,如果该指针不为NULL,表明该指针不能使用(该指针未初始化或者正在使用)

#include <stdio.h>
#include <stdLib.h>
#include <string.h>

int main()
{	
	// 定义一个整型变量,如果不知道存储什么值,可以将a初始化为0
	int a = 0;
	// 定义一个指针变量p,如果不知道指针存储谁的地址可以将其
	// 初始化为0指针,将指针指向0地址,0x00000000 -- NULL
	int *p = NULL;
	
	// *p = 200; // 也不对,p保存了0x000000000,0x00000000是进行初始化的标记,该地址指向的空间不存储值
	
	// NULL是指针初始化的标记,指针p指向NULL,表示该指针初始化了,该指针可以使用,
	// 如果指针 p !== NULL 表明该指针没有初始化,不能使用(或者该指针指向其他地址空间)
	// 好习惯:将指针用完之后将指针变量指向NULL
	if(p == NULL)  
	{
		p = &a;
	}
	system("pause");
	return 0;
}

3. 万能指针

  • 可以保存任何地址的指针

#include <stdio.h>
#include <stdLib.h>
#include <string.h>

int main()
{	
	
	// 万能指针,可以保存任意的地址
	void *p;
	
	system("pause");
	return 0;
}