【初阶指针 1 ---从入门到入土】

本文标签 :    指针概念      指针变量     指针和指针类型


前言

指针,是C语言中的一个重要概念特点,也是学好C语言的关键,要想了解指针,就得先从内存下手,掌握了内存就可以清楚的知道指针和地址以及指向对象的关联


一、指针概念&&what's内存?

    内存 (听我唠唠) : 

内存是电脑上的存储器,所有的程序在运行时都在内存中进行.

(1)我们如何使用内存?:

内存空间就好比我们现实生活中的地图,地图上的地址都给上编号,例如:xx省xx市xx区,就能精确的找到一块空间.  所以内存也是同样的道理,它好比一块大的空间,那我们如何去使用呢?

我们首先得解决两个问题  : 1.内存如何编号的   2.一个内存单元占多大空间呢?

----------------------------------------------------------------------------------------------------------------------

第一个问题1:

计算机分32位和64位:-----32指32根地址线,可以进行通电,就会转换成电信号,(分正负(1/0)),64位同理.

 而 电信号 可以转换为 数字信号 ,也就是我们熟知的1 和 0 组成的二进制序列 组成的二进制序列就是32位, 产生的序列可能性就是  000000000...(32个全0)~~~11111111(32个全1) 之间 在这个过程中就产生了2^32个二进制序列 ,这些二进制序列就是内存的编号,我们就把这些编号称为内存单元的地址.

-------------------------------------------------------------------------------------------------------------------------

第二个问题2:

一个内存单元我们管理多大空间呢,计算机单位有 Bit ,Byte , Kb ,MB , GB , TB....(1Bit=8Byte,  1Kb=1024Byte , 1MB=1024KB,以此类推)

每一个地址(也就是1和0 组成的二进制序列) 对应一个内存单元的话,那么这么多的地址就可以管理2^32个内存单元,那么一个内存单元有多大呢?   假设:一个内存单元是1Bit,那就是2的32次方个比特位的空间  2^32Bit 转换为十进制: 4,294,967,296 Bit ,再除以8得到字节 536,870,912Byte, 再除以1024得到KB 524,288 KB ,再除以1024 就得到 512 MB,除以 1024 转为GB就是 0.5GB. 最终C语言规定 :一个内存单元占的空间就是一个字节(Byte),然后分配地址,也就是说一个字节就给一个编号.

知道了以上这些是非常重要的,有了这些基础的铺垫,才能更加清晰了解之后 地址以及指针的概念.

二、指针变量

接下来了解一下指针变量:

1.定义一个整型变量 a=10,它在内存中占4个字节,%p打印出来的就是a在内存中的地址

2. 当a可以取地址时,&a同样也是一个值,这个值如果要存起来,我们就要用一个空间来存放a的值

3.一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。

假设用pa(变量名),用来存放a的地址, 加上*pa就是代表pa是指针变量,int就是pa所指向元素的类型(如下)

4. *  代表解引用操作,*pa 就是通过pa所指向的地址,找到a

(如下),打印结果为 20 .

 5.最后,我们需要注意的是 指针的大小都是相同的!不论是int* ,char*, short*.....,他们的指针大小都是相同的4 或者 8, 32位机器上 都是4 个字节 ,64位机器上 都是 8个字节 .

  如下 测试 指针 变量占用的内存空间大小 :​ 定义不同指针类型变量 , 使用 sizeof 函数 获取该变量的大小 :  最终结果都是 4个字节

#include <stdio.h>
int main()
{
    int * a ;
    char* pc ;
    float* pf;

    printf("%d\n,sizeof(pa));// 4
    printf("%d\n,sizeof(pc));// 4
    printf("%d\n,sizeof(pf));// 4 

    return 0;
}

三、指针和指针类型

指针类型的意义:

变量有不同的类型,整形,浮点型,同样指针也是有类型的.

如下, 变量 p 和 pc 所存放的值是一样的,那他们分别 +1 后他们的值是否一样呢? 打印他们的地址测试:

 我们发现 他们 存放的地址的值相等, 而他们 +1 后却不同, 我们不难看出 ,如果是一个整型指针,是+4,如果是字符指针是+1.  因为字符指针+1相当于跳过一个字符,所以 +1, 而如果是整型指针,我们相当于跳过一个整型,跳过四个字节,所以 +4 , 因为 p 和 pc 的类型不同.

所以 :  指针类型决定了:

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

2.指针走一步,能走多远(长度)  ,  int+4,char+1,double+8


总结:

---指针就是变量,是用来存放地址的变量 .它所存放的值都是地址.

--- 指针是用来存放地址的,地址是唯一的一块内存空间.

--- 32 位机器指针大小是 4 个字节,64 位机器指针大小是 8 个字节.

--- 指针的类型决定了指针向前或者向后走一步有多大(距离).

--- 指针类型是有意义的.

如有不足,还望指出

都看到这了,给个三连呗

 

  • 20
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
如果你想学习C语言,即使你没有计算机编程的基础,也不必担心。有一些简单的步骤可以帮助你入门。首先,你可以从了解C语言的基础知识开始。有一些介绍C语言基础知识的资料可以帮助你大致了解C语言的特点和用法。接下来,你需要选择一个合适的开发环境来编写和运行C语言程序。一个常见的选择是使用编译器,例如Dev C++或者Visual Studio 2019。然后,你可以尝试编写你的第一个C语言程序。这个程序可以非常简单,比如打印一句话在屏幕上。通过编写和运行这个程序,你可以开始对C语言的语法和结构有一些实际的了解[3]。从这个起点开始,你可以继续学习更多的C语言知识,并挑战更复杂的编程任务。在学习过程中,你可以阅读教材、参考文档、查找在线资源或参加编程课程来加深你的理解和技能。记住,坚持实践是学习编程的关键。通过不断地编写和调试程序,你会逐渐掌握C语言的基础,并逐渐提升自己的编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C语言初阶——手把手教零基础/新手入门(万字心得笔记)](https://blog.csdn.net/m0_63312733/article/details/122145605)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值