初阶指针(一)

Ⅰ、指针是什么

1.把内存划分为一个个内存单元,每个内存单元的大小是一个字节   1 byte = 8 bit

→1KB = 1024字节 →1 MB = 1024 GB    →TB PB...

2.每个字节都给一个唯一的编号,这个内存单元的编号==地址==指针 

(口语中说的指针通常指的是指针变量。)
 

注:取地址取的是小的地址

Ⅱ、指针变量及其大小是什么

指针变量是存放指针的,指针就是地址

一个地址的存储需要多大空间,指针变量的大小就是几个字节

插入:内存是如何编址的

对于 32 位的机器,假设有 32 根地址线,那么假设每根地址线在寻址的时候产生高电平(高电压)和低电 平(低电压)就是(1 或者 0 );
那么 32 根地址线产生的地址就会是:

  • 32位机器上     32根地址线  2^32个地址   →字节 →4GB空间进行编址
  • 64位机器同理

提问: 64位机器上,指针变量的大小为什么是8个字节?

             64位平台下地址是64个bit位(即8个字节)

总结:指针大小在32位平台是4个字节,64位平台是8个字节

int main()
{
    int a = 10; // 变量的创建是需要向内存申请空间的 向内存申请4个字节的空间
    printf("%p\n",&a);    // %p专门用来打印地址的
    int* pa = &a;  //  pa叫指针变量  存放指针  整型指针类型   &-取地址操作符
    *pa = 20; //  *-解引用操作符-通过pa找到pa指向的a  *pa 就是 a
    printf("%d\n",a);
    return 0;
}    

Ⅲ、指针类型及其意义

1.指针的解引用

对指针解引用的时候有多大的权限(能操作几个字节)

整型指针,解引用,访问4个字节

  • 字符型指针,解引用,访问1个字节

2.指针+/-整数

指针的类型决定了指针向前或者向后走一步有多大(距离)。(指针进行+1  -1的时候)

pa+n   等价于  +n*sizeof(int)

pc+n    等价于  +n*sizeof(char)

应用:

Ⅳ、野指针

1.概念:

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

2.野指针成因

1)指针未初始化

#include <stdio.h>
int main()
{ 
    int* p;//局部变量指针未初始化,默认为随机值
    *p = 20;
    return 0;
}

2)指针越界访问

#include <stdio.h>
int main()
{
    int arr[10] = {0};
    int *p = arr;
    int i = 0;
    for(i=0; i<=11; i++)
   {
        //当指针指向的范围超出数组arr的范围时,p就是野指针
        *(p++) = i;
   }
    return 0;
}

3)指针指向的空间释放

3.如何规避野指针

1). 指针初始化
2). 小心指针越界
3). 指针指向空间释放,及时置 NULL
4). 避免返回局部变量的地址
5). 指针使用之前检查有效性

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值