【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂)

这篇具有很好参考价值的文章主要介绍了【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂),《C语言初级篇》,c语言,开发语言,指针,算法,C++

🎬 鸽芷咕:个人主页

 🔥 个人专栏:《C语言初阶篇》 《C语言进阶篇》
⛺️生活的理想,就是为了理想的生活!

📋 前言

   🌈hello! 各位宝子们大家好啊,今天给大家带来的指针篇的初阶,带你先从底层一步步理解指针!
   ⛳️指针可以说是C语言最重要的部分了!俗话说,函数是C语言的核心,那么指针可以说就是咱们程序的灵魂了。
   📑不过不用但心读完这篇文章你就会发现指针也是那么回事,一学就懂!

   📚本期文章收录在《C语言初阶篇》,大家有兴趣可以看看呐
  ⛺️ 欢迎铁汁们 ✔️ 点赞 👍 收藏 ⭐留言 📝!

💬 什么是指针?

  ⛳️大家都知道我们计算机存储东西都是存储在内存,或者存储在硬盘里面。那么我们该如何管理我们的内存呢?这时就有人说那么我们把内存划分位一个个的字节,然后每个字节给上编号。这样是不是就容易管理我们的内存了!
【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂),《C语言初级篇》,c语言,开发语言,指针,算法,C++

总结:指针就是地址,口语中说的指针通常指的是指针变量

⛳️ 那么我们用什么来管理地址的呢?这时指针就被发明出现了,指针用于专门存放我们的地址来的。

  • 存放可以改变的数据叫变量,那么存放地址的叫什么?
  • 指针是用来存放内存地址的变量,所以我们叫他指针变量。

大家都知道我们变量的创建和数组创建都是在内存中开辟了一块空间,那么就肯定有地址。如果那想把变量或数组的取出来就需要 & 取地址操作符!

📚 代码演示:

#include <stdio.h>
int main()
{
	int a = 100;
	int * pa = &a;//pa是专门用来存放地址(指针)的,
	char* pc = &a;//这里的pa就被称为指针变量
	return 0;
}

总结:
指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。

💭 指针的大小

地址的编号是怎么产生的:

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

  • 那么32根地址线产生的地址就会是:
    【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂),《C语言初级篇》,c语言,开发语言,指针,算法,C++

每个地址标识一个字节,那我们就可以给
(2^32Byte == 2^32/1024KB ==232/1024/1024MB==232/1024/1024/1024GB == 4GB)
4G的空间进行编址。同样的方法,那64位机器,如果给64根地址线,那能编址多大空间,自己计算。

⛳️这时我们就会知道

  • 在32位的机器上,地址是32个0或者1组成二进制序列,那地址就得用4个字节的空间来存储,所以
    一个指针变量的大小就应该是 4 个字节。
  • 那如果在64位机器上,如果有64个地址线,那一个指针变量的大小是 8 个字节,才能存放一个地址。

📑 总结:

  • 指针变量是用来存放地址的,地址是唯一标示一个内存单元的。
  • 指针的大小在32位平台是4个字节,在64位平台是8个字节
  • 我们也可以验证来看看!

📚 代码演示:

#include <stdio.h>
int main()
{
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(long*));
	printf("%d\n", sizeof(float *));
	printf("%d\n", sizeof(double*));

	return 0;
}

📑 代码结果:
【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂),《C语言初级篇》,c语言,开发语言,指针,算法,C++

💭 指针类型的意义

  ⛳️诶这时就会有铁汁们问了,既然指针的大小都是一样的那么指针有类型嘛?答案是有的指针也有各种各样的类型。

#include <stdio.h>
int main()
{
	char* pc = NULL;
	int* pi = NULL;
	short* ps = NULL;
	long* pl = NULL;
	float* pf = NULL;
	double* pd = NULL;

	return 0;
}

这里可以看到,指针的定义方式是: type + **说明了我们是指针变量
其实:

  • char* 类型的指针是为了存放 char 类型变量的地址。
  • short* 类型的指针是为了存放 short 类型变量的地址。
  • int* 类型的指针是为了存放 int 类型变量的地址

⛳️ 而这又有人会问了,指针的大小都是一样那么指针要这么多地址干嘛呢?

  • 其实指针的类型是为了解引用而设计
  • int 类型的解引用,就会访问4个字节
  • 而char 类型 解引用就只能访问一个字节

📚 代码演示:
【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂),《C语言初级篇》,c语言,开发语言,指针,算法,C++
🔥 总结:指针类型可以决定指针解引用的时候访问多少个字节(指针的权限)。

📖 指针的加减

  ⛳️ 前面讲了指针的类型决定了我们解引用的时候访问多少字节,而指针的类型还有一个作用!

  • 指针类型决定了指针 加或减 操作时的步长
  • 整形指针 +1 跳过4个字节
  • 字符指针 +1 跳过1个字节
  • 而其他指针也同理,下面我们就来验证一下

📚 代码演示:

【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂),《C语言初级篇》,c语言,开发语言,指针,算法,C++

这里大家就能看到对于不同类型的指针,我们进行加减所能操作的步长时有关系的!

  • 对于 type * p 的指针想要加 nn 是这样计算的
  • n*sizeof(type)

那么这么的用处是什么?假设我们有一串字符 "abcdef/n ” 如果指针指向第一个元素,那么就只能跳过一个字节访问 b

  • 但如果用int 类型的指针进行计算就会跳过4个字节
  • 指向字符 e 了,所以整形指针就应该存放 整形变量的地址
  • 这样才是最合理的。

【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂),《C语言初级篇》,c语言,开发语言,指针,算法,C++
🔥 总结:指针的类型决定了指针向前或者向后走一步有多大(距离)。

💬 野指针

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

📖 野指针成因

📝1. 指针未初始化

局部变量指针未初始化,默认为随机值。所以它指向了一个不可预料的地址,当我们使用这个指针进行赋值时就会出现问题!

  • 你连指针指向哪里都不知道,结果你想用这个地址赋值!
  • 万一更改了程序配置呢? 这肯定是不允许的!
#include <stdio.h>
int main()
{ 
 int *p;//局部变量指针未初始化,默认为随机值
    *p = 20;
 return 0;
}
📝 2. 指针越界访问

这里明明我们数组只有10个元素,但是使用指针缺访问了却跳过了11个元素。

  • 访问了不属于它管理的地址,就是指针越界了
#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. 指针指向的空间释放

⛳️ 大家可以看一下下面这段代码,变量 a 属于栈区上的空间,所以test函数结束时在其内部创建的变量就会销毁,还给操作系统。

  • 那么这里p 所接收的地址就是一个野指针不确定的。
  • 所以我们打印出来的也是随机值。

🔥 注:C/C++的内存分别我们在这里有明确讲解,比如说栈空间是干嘛的?大家可以去了解了解《C/C++的内存分布》
📚 代码演示:

#include <stdio.h>((
int*  test()
{
	int a = 110;
	return &a;
}
int main()
{
	int* p = test();
	printf("");
	printf("%d\n",*p);

	return 0;
}

📑 代码结果:
【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂),《C语言初级篇》,c语言,开发语言,指针,算法,C++

💬 如何规避野指针

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

这些就是我们需要注意的点了,对于指针一定要避免成为空指针。释放完不用是要及时置为空。

  • 下面就为大家演示一下

📚 代码演示:

#include <stdio.h>
int main()
{
    int *p = NULL;//p是一个空指针,没有指向任何有效空间。   
    int a = 10;  //这个指针不能指针使用
    p = &a;
    if(p != NULL)
   {
        *p = 20;
   }
    return 0;
}

📝全篇总结

✅ 归纳:
好了以上就是关于什么是 指针和指针的注意事项就给大家讲解清楚了!有不会可以评论留言或私信博主呢!
  什么是指针
  指针类型的意义
  野指针成因
  如何避免野指针
☁️ 本章的内容就是这么多啦!下一章给大家讲解指针的运算和数组与指针的关系!
看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注

💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂),《C语言初级篇》,c语言,开发语言,指针,算法,C++文章来源地址https://www.toymoban.com/news/detail-598387.html

到了这里,关于【C语言初阶】初学必看,深入了解指针的概念!看完让你不在害怕指针(图文并茂)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言初学必看】一知半解的for循环嵌套for循环

     初学C语言,常常遇到for循环中嵌套个for循环,初学者对于这种形式总是一知半解,这次我就整理了常见的for循环嵌套for循环的题目,我们一起争取一举拿下这类题。学废他们,以后再见到就不怕啦!每天都要学一点呀。加油,奋斗的我们! 💪💪💪 目录⛳ 🔥🚀前言+目录

    2024年02月02日
    浏览(32)
  • 【C语言初阶(八)】初阶指针详解

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 我们在介绍C语言时已经给大家介绍过指针的概念以及内存地址的概念了,这里我们就不再重复说明前面的内容,对指针毫无了解的

    2024年02月09日
    浏览(34)
  • 【C语言】初阶指针(指针及其类型以及野指针)

    简单不先于复杂,而是在复杂之后。 目录 1. 指针是什么? 2. 指针和指针类型  2.1  指针+-整数 2.2 指针的解引用  3. 野指针  3.1 野指针成因  3.2 如何规避野指针  指针理解的两个要点: 1. 指针是内存中最小单元的编号,也就是地址。 2. 平时口语中说的指针,通常指的是指

    2023年04月16日
    浏览(39)
  • C初阶必写的C语言小游戏—扫雷,一看就会,看完就能写

    人尽皆知的扫雷小游戏,原理简单,写法也简单,我会通过C语言分各个部分将这个小游戏进行剖析,一看就会! 我们需要新建一个头文件game.h,两个源文件game.c和text.c,一共三个文件 他们的关系是这样的: test.c是主体,是游戏的测试逻辑 game.c是游戏的实现逻辑 game.h是实现

    2024年02月05日
    浏览(32)
  • 初阶C语言-指针

    🌞 . ◡̈ ᴴᴬᵛᴱ ᴬ ᴳᴼᴼᴰ ᵀᴵᴹᴱ我们终会上岸,无论去到哪里都是阳光万里,鲜花灿烂 ₍ᐢ •⌄• ᐢ₎ 今天我们一起学习一下指针的相关内容吧! 📖指针是什么呢? 1.指针是内存中的一个最小单元的编号,也就是地址。 2.平时口语中说的指针就是指针变量,是用

    2024年02月12日
    浏览(31)
  • 【C语言】指针初阶

     哈喽,大家好,今天我们来学习C语言中的指针,今天主要学习初阶指针,后期我们将继续学习指针进阶。 目录 1. 指针是什么 2. 指针和指针类型 2.1 指针+-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针+-整数 4.2 指针-指针 4.3 指针的关

    2024年02月09日
    浏览(31)
  • C语言——指针初阶

     哈喽,大家好,今天我们来学习C语言中的指针,今天主要学习初阶指针,后期我们将继续学习指针进阶。 目录 1. 指针是什么 2. 指针和指针类型 2.1 指针+-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针+-整数 4.2 指针-指针 4.3 指针的关

    2024年02月05日
    浏览(70)
  • C语言——指针详解(初阶)

    在C语言学习过程中,指针算一个难点。我总结所学的指针知识,写一篇博客,希望大家对指针的知识理解的更通透。 每个内存都有一个唯一的编号,这个编号也被称为地址,C语言创建变量。都要在内存上开辟空间。 编号= = 地址 = =指针 我们可以通过(取地址操作符)取出变

    2024年02月16日
    浏览(30)
  • C语言指针(初阶)

    嘻嘻,家人们,今天咱们剖析一下指针,好啦,废话不多讲,开干! 假设有一栋宿舍楼,把uu们放在楼里面,楼上有100个房间,但是房间没有编号,此时如果uu们的朋友来找uu们玩的话,就得挨个房间去找,这样子的话,效率很低,但是如果我们根据每个楼层与楼层的放假情况,给每个房间进行编号

    2024年02月20日
    浏览(33)
  • 【C语言】指针----初阶

    💓 博客主页:江池俊的博客 ⏩ 收录专栏:C语言初阶之路 🎉如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 一、指针是什么? 1.1指针与内存间的关系 内存 1.2指针变量存放地址 二、指针和指针类型 2.1指针有哪些类型? 2.2指针类型的意义是

    2024年02月15日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包