C语言——指针初阶

指针初阶的一些知识点
摘要由CSDN通过智能技术生成

1.指针是什么?

官方定义:在计算机科学中,指针(Pointer)是编程语言的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此,将地址形象化的称为“指针”。意思是通过它可以找到以它为地址的内存单元。
简而言之,指针就是变量,用来存放地址的变量(存放在指针中的值都被当做地址处理)

那么一个小的单元到底是多大呢?(一个字节)
如何编址?
经过仔细的计算和权衡发现一个字节给一个对应的地址是比较合适的。
对于32位的机器,假设有32根地址线,那么假设每一根地址线在寻址的是产生一个电信号正电/负电(1/0)
那么32根地址线产生的地址就是:
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000

11111111 11111111 11111111 11111111
这里就有2的32次方个地址,每个地址识别一个字节,那就可以算出:
2^32 / 1024 / 1024 /1024 = 4GB,就有4gb的空间进行编制
所以就有:
在32位机器上,地址是32个0或1组成的二进制序列,那地址就得用4个字节的空间来储存,所以一个指针变量的大小就应该是4个字节
那如果在64位的机器上,如果有64根地址线,那一个指针变量的大小就是8个字节,才能存放一个地址

总结
指针是用来存放地址的,地址是唯一标示一块地址空间的
指针在32位平台上是4个字节,在64位平台上是8个字节

2.指针和指针的类型

1.指针类型决定了指针解引用的权限有多大(能操作几个字节),比如int类型的指针可以访问4个字节,char类型的指针可以访问1个字节,double类型的指针可以访问8个字节!

2.指针类型决定了,指针走一步,能走多远(步长)比如:int类型的指针 *p+1会跳过4个字节,char类型的指针 *pc+1只会跳过一个字节。

3.野指针

 概念:野指针就是指针指向的位置都是不可知的(随机的,不正确的,没有明确限制的)

是什么导致了野指针的出现:
1.指针未初始化
举例:

int main()
{
   
    //这里p就是野指针
    int* p;// p是一个局部变量,局部变量不初始化的话,默认是随机值
    *p = 20;// 非法访问内存了
    return 0;
}

2.指针越界访问
举例:

int mian()
{
   
    int arr[10] = {
    0 };
    int* p = arr;
    int i = 0;
    for (i = 0; i <= 10; i++)//循环了11次,但是arr数组只有10个元素
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值