C - 指针

C语言–备忘



一、指针定义

指针的本质就是一个变量,永远只能存储一个地址【编号】

  1. 通过指针变量保存的变量的地址可以对这块内存区域任意访问;
  2. 指针指向的内存区域可以保存一个数字,而这个数字有数据类型;

二、指针语法

  1. 指针变量定义的语法格式:
    2.1 定义指针变量后,这个变量 pa 能保存一块内存区域的首地址,这块内存区域保存着int 类型的数据;
    2.2 由于指针也是变量,也需要分配内存,与计算机硬件相关 [固定]。32位系统:一个地址值32位,4字节;64位系统,一个地址为64位,8字节;

结论: 指针变量本身没有数据类型,它指向的内存区域有数据类型,所以int 不是给指针变量用,而是给指针指向的内存区域保存的数字用;

// 形式一:int * 变量名;
    int * pa;//定义一个指针变量
    
// 形式二:int* 变量名;
    int* pa;//定义一种指针变量
    
// 形式三:int *变量名
    int *p;//定义一个指针变量***推荐

//连续定义指针
int *pa,*pb;//两个指针变量
int *pa, pb;//pa为指针,pb为普通int 变量

若指针不初始化,地址值为任意值,危险,此指针为野指针

三、指针初始化

初始化:

  1. 指针变量初始化通过取地址&来进行;
  2. 函数定义语法:
//分配四字节
int a=250;	

//定义指针变量[4字节内存空间]//"*"为形式上的*
int *pa=&a; 

// "*"为解运算符
printf("请打印%d",*pa);//

代码对应图例:
指针与内存

开辟4字节地址空间,指向整型变量;

四、解引用

  1. 通过解引用运算符:’ * ’ 和指针变量对指向内存区域进行查看和修改。
char a= 100;
char *pa=&a;
//结果pa=&a, &pa 指向pa地址, *pa=a。
printf("%p,%p,%p,%hhd,%c\n",pa,&a,&pa,*pa,a);

//分别为1、4,指针永远为4个字节
printf("sizeof(a)=%d,sizeof(pa)=%d",sizeof(a),sizeof(pa));

sizeof(指针变量名)=4B(永远)//和硬件相关,32位

五、空指针和野指针

1. 空指针

定义: 空指针变量:保存空地址,用NULL表示,其实就是编号为0的地址;NULL=0地址;不可随意访问,否则程序崩溃;

short *pb=NULL;

//报错,无法调出空指针指向的内容
printf("PB指向0地址保存的数据为:%#x"*pb); 

*pb=20printf("测试信息为.\b");

2. 野指针

**定义:**没有初始化的指针变量,保存着随机地址,指向一块无效的内存,这块内存操作系统并没有给你分配;

int *pc;
printf("PB指向0地址保存的数据为:%#x"*pc);

*pc=250; //向随机地址写入数据
printf("测试信息");
return 0; 

3. 合理使用

  1. 如果定义一个指针标量,不清楚指向谁,一定需要初始化NULL,否则野指针。
  2. 如果初始化为空指针,后续使用指针时需要对指针变量安全判断,判断是否为NULL。
  3. 若为NULL,让程序结束或者返回,如果有效,程序才能通过指针进行操作。
int *p=NULL;//赋值为空指针
int a=250;
p=&a;//p指向a

if(NULL==pa){
   
    printf("pa指向空指针,不能继续访问.\n");
    return -1;//exit(0)程序返回和退出
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值