首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C语言】指针(野指针)

2:如何规避野指针 1.1:指针变量的初始化 2.2:指针越界访问 3.3:指针指向的空间如果我们还回去的话,就把指针指针置为NULL  4.4:指针使用之前检查有效性 1:什么是野指针?...指针越界也会导致野指针问题,这里解释下:就是当你指针指向的范围超过数组名范围时,那么那个指针就是野指针了。...2:如何规避野指针 1.1:指针变量的初始化 int a = 10; int* pa = &a; //指针变量的初始化 指针常见错误 引用未初始化的指针变量 试图引用未初始化的指针变量是初学者最容易犯的错误...3.3:指针指向的空间如果我们还回去的话,就把指针指针置为NULL NULL——空指针,用来初始化指针或者给指针赋值,可以转到定义看看 #define NULL    ((void *)0) 说的简单一点就是...空指针不应与未初始化的指针混淆:保证空指针与指向有效对象的任何指针进行比较。但是,根据语言和实现,未初始化的指针可能没有任何此类保证。它可能与其他有效指针相等; 或者它可能比较等于空指针。

2.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言指针

    指针的理解 1. 指针是一个值为内存地址的变量。 2. 指针本质上是地址,是计算机存放数据的空间。 3. 在通常情况下,我们把等号左边的指针理解成正常指针,把等号右边的指针理解成地址。...指向一级指针的指针就是二级指针。 2. 二级指针里面存放的是一级指针的地址。...int main() { int arr1[10] = { 0 }; int (*p) [10] = &arr1; return 0; } //p是数组指针的变量名,p指向数组arr1整体,该数组有...NULL 是C语言中定义的⼀个标识符常量,值是0,地址也是0,这个地址是无法使用的,读写该地址会报错。所以在解引用之前,必须确保它不是一个NULL指针。 4. ...如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

    3800

    C语言——指针

    指针是c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简洁,紧凑,高效,每一个学习和使用c语言的人,都应当深入了解地学习和掌握指针,可以说,不掌握指针就是没有掌握C的精华也可以说...指针是C语言的灵魂(doge) 由于通过地址能找到所需的变量单元,可以说,地址指向变量单元,打个比方,一个房间的门口挂了一个房间号2008,这个2008就是房间的地址,或者说,2008"指向"...3.指针指向空间释放即使置NULL 4.避免返回局部变量的地址 5.指针使用之前检查有效性 指针运算 小时候我们就知道1+1等于几 那我问你如果是指针加1的话 加的是那个数字吗 ?...下面来看一段代码: 这里我们可以发现p跟p+1相差1 这里c是多少呢 ?...16进制的C的10进制是12,所以q+1和q相差4  p是整型指针相当于sizeof(int)=4 q是字符型指针相当于sizeof(char)=1; 以上就是我归纳指针的一些小结 如果能帮助友友们 -

    2.3K20

    C - 指针C语言指针的总结

    C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一个字节都有一个内存地址,这个地址是一个十六进制的数。...什么是指针:变量的地址叫做指针,指针就是地址,地址就是指针。 下面通过一张图可以更直观的理解内存中的地址 ? 内存中的地址演示图 2. 指针 指针是C语言的灵魂。指针变量占据8个字节。...*表示这个变量不是一个普通变量,而是一个专门用来存储地址的指针变量,所以有哪些普通的数据类型,就可以有哪些类型的指针。...int *p1, * p2, * p3; 野指针 我们声明一个指针变量,如果没有为其初始化,那么这个时候这个指针变量中是有值的,是垃圾值,随机数。...指针为什么要分类型? 多级指针 一个指针变量中存储的是一个一级指针的地址,那么它就是二级指针,一个指针变量中存储的是一个二级指针的地址,那么它就是三级指针。

    4.2K81

    C语言_初识C语言指针

    计算机的 存储器 容量是以 字节 为最小单位来计算的,对于一个有128个存储单元的存储器,可以说它的容量为128字节。...存储器 被划分成了若干个存储单元,每个存储单元都是从0开始顺序编号,如一个存储器有128个存储单元,则它的编号就是从0-127。...为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址 编号 = 地址 = 指针 指针变量 = 变量 = 存放地址的变量 ---- 一、指针 … 一个内存单元多大比较合适...在计算机上,有地址线,物理的电线,有高低电平的信号,转换数字信号:1/0 32位机器,上面有32根地址线 2的32次方个字节的空间 - - - 4,294,967,296 Byte — 4GB --...-- 通过pa里存放的a的地址找到a ---- 三、指针变量的大小 指针变量是用来存放地址的 32位机器上:地址是32个二进制位,这个地址要存储的话要4个字节,所以在32位机器上,指针变量的大小是

    19130

    【C语言】指针

    二、指针的定义 三、指针的初始化 四、指针运算符 五、指针的用途举例 六、关于指针的疑问 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。...1.我们已经知道,"直接引用"是直接通过变量名来读写变量 2.C语言中还有一种"间接引用"的方式(以变量a为例):首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a...默认情况下,一个函数只能有一个返回值,有了指针,我们可以实现函数有"多返回值"。...和是函数的直接返回值,差是通过函数的第3个指针参数间接返回。 因此有了指针,我们可以让函数有"无限个"返回值。...* 看下面的代码,利用指针p读取变量c的值 1 int i = 2; 2 char c = 1; 3 4 // 定义一个指向char类型的指针 5 char *p = &c; 6 7 // 取出 8

    3.3K60

    C语言: 指针

    目录 概念: 指针的类型 指针的解引用 野指针 野指针的成因 空指针 指针与数组 指针在数组中的使用: 二级指针 ---- 概念: 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址...例如: int a=10; int* p=&a; 总结: 指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。...野指针 概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量 在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一 个地址是不确定的变量...1、指针初始化  2、小心越界访问 3、指针指向的空间释放 4、使用之前检查有效性 空指针 即是将指针置空 int* p = NULL; 指针与数组 #include <stdio.h...0; } 指针指向的是目标变量的地址,那么二级指针指向的就是指针的地址。

    2K70

    C语言:指针

    学习 C 语言的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。...接下来让我们看看什么是指针。 什么是指针? 指针和其他的int, float等类似, 是一种类型. 有类型就有相应类型的变量和常量. 本文主要讨论变量的情况....指针变量就是一种变量, 和其他种类的变量类似, 但指针和其他变量又有区别. 首先C语言作为一种类型语言, 每个变量都会有几个属性. 变量名称. 变量类型. 变量的值....Address stored in ip variable: bffd8b3c Value of *ip variable:20 类型 对于C语言来说, 搞清楚变量的类型相当重要, 涉及到指针的时候就更加重要...整个来说: next是一个指针, 指向一个函数, 函数的返回值也是一个指针, 指向一个类型为char的常量指针. C语言为类型语言, 即每个变量都有类型.

    2.7K20

    C语言 | 指向指针的指针

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...我有故事,你有酒么? 例82:C语言用指向指针的指针的方法对n个整数排序并输出;要求将排序单独写成一个函数;n个整数在主函数中输入,最后在主函数中输出。...解题思路:读者看着道题的时候,首先要观察一下有什么规律,然后指向指针的指针在上一道练习题中已经有了铺垫,读者可以联系上一道题去熟练使用指向指针的指针。...C语言源代码演示: #include//头文件 int main()//主函数 { void sort(int **point,int number); //sort排序函数声明

    3K32

    C语言指针(三)函数指针

    函数指针 在我们定义函数的时候,编译器也会在内存空间给函数开辟一个内存,而该内存的首地址就是函数的内存地址,而函数指针就是指向该内存地址的。...3.1 函数 众所周知,C语言是面向过程的语言,或者称函数式编程。 而在C语言中,函数也确实起了很大的作用,在C语言的学习中,你见过最多的可能就是main函数,同时也是你第一个见得函数。...; return 是函数结束的关键字,返回值为0表示程序正确运行,为其他表示有其他异常 切记main函数不要void main(){},这个真的很重要 ❞ 3.2 指向函数的指针 见名知意,这个东西也是一个指针...定义也是有亿点点麻烦,不过却也不是不好理解。...定义: int (*funP)(int num1, int num2); // 定义一个函数,有两个整型参数 因为运算符优先级的存在,所以我们需要对变量名与*进行首先运算 使用: #include <stdio.h

    2K00

    【C 语言】多级指针 ( 在函数中生成 二级指针 | 通过传入的 三级指针 进行间接赋值 )

    文章目录 前言 一、在函数中生成 二级指针 ( 通过传入的 三级指针 进行间接赋值 ) 二、完整代码示例 前言 如果要 通过 函数形参 间接赋值 修改 n 级指针, 需要向函数中传入 n + 1...级指针 形参 ; 一、在函数中生成 二级指针 ( 通过传入的 三级指针 进行间接赋值 ) ---- 通过 函数 形参变量 , 间接赋值 返回 生成的 二级指针 函数 ; 如果要生成一个 二级指针 ,...必须传入 三级指针 , 才能修改 该 二级指针 ; 注意 : 传入的 三级指针 , 不要直接修改该值 , 先创建一个临时的 局部二级指针变量 , 将 二级指针 生成完毕后 , 最后再给 三级指针 指向的地址...== NULL) { return -1; } // 遍历 二维指针 指向的多个 一维指针 // 并为每个 一维指针 在堆内存中 分配 20 字节内存...if(p == NULL) { return -1; } // 遍历 二维指针 指向的多个 一维指针 // 并为每个 一维指针 在堆内存中 分配 20

    1.1K10

    【C语言初阶】指针的运算or数组与指针的关系你了解吗?

    鸽芷咕:个人主页 个人专栏:《快速入门C语言》《C语言初阶篇》 ⛺️生活的理想,就是为了理想的生活!...本期文章收录在《C语言初阶篇》,大家有兴趣可以看看呐! ⛺️ 欢迎铁汁们 ✔️ 点赞 收藏 ⭐留言 !...指针的关系运算 指针减指针的运算我们学了其实指针的运算还有一条规定: C语言标准规定: 允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较...但是:这并不符合C语言的标准,所以我们尽量不要这样写以免有些编译器跑不过去。...有问题可以评论或者私信呢秒回哦。

    14110

    C语言(指针)8

    qsort 是C语言中的一个库函数,使用 qsort 库函数需要包含头文件 。这个函数是用来对任意数据类型的数据排序的。...那我们把基本框架封装成一个函数,而用于数据的比较部分我们再写一个函数,这样的话我们想排序什么类型,只需要写一个相应类型的比较函数,再将这个函数传给事先就分装好的框架函数,不就实现了想排序什么类型的数据就排序什么类型的数据吗?...在 C语言(指针)2 中我们说过这么两段话: 虽然void *类型的指针不能直接进行解引用操作,也不能 +- 整数的操作, 但是当我们不知道别人给我们传的地址是什么类型的时候,我们就可以放心地去用void...其实细心的朋友已经知道了,因为我们之前给出的截图中已经有两行大字明确说明了这种写法的风险,并且推荐了更加科学的写法。...结构体成员访问有两种方法,一种是我们用过的 " . " 结构体成员访问操作符,还有一种就 是 “->” 结构体成员访问操作符。

    8410

    C语言(指针)9

    2、数组和指针试题解析 我们之前说过,数组名表示数组首元素的地址,但是有两个特例:sizeof(数组名)和 &数组名,这时候的数组名表示的是整个数组,sizeof(数组名)计算的是整个数组的大小...还记得我们开头对sizeof的介绍吗?sizeof后面的表达式不会真实参与计算,所以不存在越界。...首先来看第一个,++pcc使指针pcc指向了数组pc的第二个元素,解引用得到了第二个元素c+2,c+2也是一个指针,指向的是数组c的第三个元素,再解引用就得到了数组c的第三个元素也就是字符串“point...再来看第二个,首先算++pcc,因为之前pcc已经指向数组pc的第二个元素,所以这次++pcc使指针pcc指向了数组pc的第三个元素,解引用得到了第三个元素c+1,c+1再--变为c,c是数组名是其数组首元素的地址...pcc经过之前的两个自增运算已经指向了数组pc的第三个元素,此时-2指针pcc又重新指向了第一个元素,解引用得到c+3,c+3指向的是数组c的第四个元素,解引用得到字符串“first”首字符‘f’的地址

    6410

    C语言——指针(2)

    * pc = &c;//字符指针 printf("%c\n", *pc);//字符指针解引用 return 0; } 字符指针只有一种使用方式吗?...,那么这里的字符指针存放的是一整个字符串吗?...我们一起来看看: C/C++会把常量字符串存储到单独的⼀个内存区域,我们知道常量字符串是不可以被修改的,既然不可以被修改,那么内容相同的常量字符串只需要保存一次就好了,当⼏个指针指向同⼀...函数指针 相信大家已经有经验了 函数指针——指向一个函数的指针,存放的是函数的地址。 那么函数是不是也有地址呢?...结论:函数是有地址的,函数名就是函数的地址,函数名和&函数名都是代表函数地址,没有区别 函数指针变量 那么如果存放函数地址就需要创建一个函数指针变量,那么应该如何创建一个函数指针变量呢?

    8310

    C语言—指针(1)

    我们把这个地址叫做:指针 内存单元的编号 == 地址 == 指针 1.2 编址 CUP访问内存中的某块字节空间,就必须知道这个字节空间在内存中的哪块位置,因为内存中的字节有很多,所以就要给内存进行编址...指针变量和地址 2.1 取地址操作符(&) C语言中创建变量就是向内存中申请空间 比如: &: 取地址操作符,是个单目操作符 &a:表示取出a的地址 比如: int 型的变量占4个字节...C语言中我们拿到了地址(指针),就可以找到地址(指针)指向的对象。 这里我们就要介绍一种操作符解引用操作符:* *p的意思是通过p中存放的地址找到指向的空间。...p = &a; void* pc = &a; *p = 20; *pc = 0; return 0; } 用VS运行上述代码会报错,无法直接进行指针运算 那么void * 类型的指针有什么用呢...,但是可以修改指针变量本身的值(修改的指针变量的指向) 6.指针运算 指针的基本运算有三种: 指针±整数 指针-指针 指针的关系运算 6.1 指针±整数 我们都知道数组在内存中是连续存放的,只要知道首元素的地址就可以顺藤木瓜知道后面元素的地址

    6610

    C语言——指针进阶

    指针的大小是固定的 4/8 个字节( 32 位平台 /64 位平台)。 3. 指针是有类型,指针的类型决定了指针的 +- 整数的步长,指针解引用操作的时候的权限。 4....字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* ; 常见的使用方式 int main() { char ch = 'w'; char *pc = &ch; *pc = '...C/C++会把常量字符串存储到单独的一个内存区域,当几个指针指向同一个字符串的时候,他们实际会指向同一块内存。 但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块 。...难道两个是一样的吗?...sizeof(arr) / sizeof(arr[0]); i++) { printf("%d ", arr[i]); } printf("\n"); return 0; } 这篇文章详解了C语言中最大的难点指针

    13810

    C语言——指针(1)

    在C语言中,指针其实就是内存的地址,我们使用指针变量来存放指针(一般来说,没有特别说明,大家都是默认“指针”就是“指针变量”)。我们可以通过指针(地址)找到对应的内存空间里存放的数据。...所以总的来说,我们可以这样理解,内存单元的编号==地址==指针。 二.指针的使用 在C语言中,我们使用取地址操作符&来获取变量的地址。我们将其地址存放到指针当中。...NULL是空指针,它是C语言定义的标识符常量,其值为0,地址0是无法使用的,强行使用编译器会报错。...4.指针不使用时,置NULL,使用前检查其有效性 当指针不再使用时,我们要及时把其置为NULL指针。指针其实给予了我们直接掌控内存的权利,胡乱使用指针是非常危险的,有可能直接导致代码崩溃。...关于指针就先写到这里了,希望可以帮助到有需要的人。 我们下一篇指针再见!!!(摸鱼摸鱼✨)

    7910

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券