指针的一些基础认知

#include<stdio.h>
int main(void){

//一,指针
//指针实际上也是变量的一种,和普通的变量一样,所以也叫指针变量。
int a = 1;
//定义一个指针变量
int *p;
//%p是打印地址
//%x是以十六进制形式打印
printf("1 p = %p.\n",p);
printf("2 p = %x.\n",p);

//p指向a的地址
p = &a;
printf("3 p = %d.\n",p);//打印a的地址
printf("4 p = %d.\n",*p);//打印a的地址
printf("5 a = %d.\n",&a);//打印a的地址
printf("6 a = %d.\n",a);//打印a的值

//p指向内存地址为6的那个变量
p = (int*)6;
printf("7 p = %d.\n",p);


//二   野指针问题
//野指针是指指向随机内存的指针,所以所指向的值可能是随机的。
//怎么避免野指针
//1:定义指针时,同时初始化为NULL
//2: 在指针解引用之前,先去判断这个指针是不是NULL
//3: 指针使用完之后,将其赋值为NULL
//4: 在指针使用之前,将其赋值绑定给一个可用地址空间

int a_2 = 2;
int *p_2 = NULL;
if(p_2 == NULL){
	p_2 = &a;
}
p_2 == NULL;

//三   const关键字
//在C语言中用来修饰变量,表示这个变量是常量。
const int a_3 = 3;

const int *P_3_1;
int const *P_3_2;

int * const P_3_3;
const int * const P_3_4;

//这一行报错,*P_3_1是只读的,表明指针P_3_1指向的值是常量
//*P_3_1 = 3;
//正常,表明指针P_3_1不是常量
P_3_1 = &a_3;

//这一行报错,*P_3_2是只读的,表明指针P_3_2指向的值是常量
//*P_3_2 = 3;
//正常,表明指针P_3_2不是常量
P_3_2 = &a_3;

//这一行正常,*P_3_3是可写的
*P_3_3 = 3;
//这一行报错,P_3_3是只读的,表明指针P_3_3是常量
//P_3_3 = &a_3;

//这一行报错,*P_3_4是只读的,表明指针P_3_4指向的值是常量
*P_3_4 = 3;
//这一行报错,P_3_4是只读的,表明指针P_3_4是常量
//P_3_4 = &a_3;

//四 数组
//数组中的地址都是连续的,所以用地址操作起来很方便.
//数组的地址是常量,是编译器确定的地址,所以数组的地址不可以重新赋值。

//五 指针与强制类型转换
// 数据类型的本质就是,决定数据在内存是如何存储的。
//指针类型就是指,这个指针指向的是一个怎样的数据结构。
//p_5指向的是一个int型的数据结构
int *p_5 
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值