首页
学习
活动
专区
工具
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语言指针

二、指针的定义 三、指针的初始化 四、指针运算符 五、指针的用途举例 六、关于指针的疑问 指针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 - 指针C语言指针的总结

    C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一个字节都有一个内存地址,这个地址是一个十六进制的数。...什么是指针:变量的地址叫做指针指针就是地址,地址就是指针。 下面通过一张图可以更直观的理解内存中的地址 ? 内存中的地址演示图 2. 指针 指针C语言的灵魂。指针变量占据8个字节。...*表示这个变量不是一个普通变量,而是一个专门用来存储地址的指针变量,所以哪些普通的数据类型,就可以哪些类型的指针。...int *p1, * p2, * p3; 野指针 我们声明一个指针变量,如果没有为其初始化,那么这个时候这个指针变量中是值的,是垃圾值,随机数。...指向函数的指针的初始化 函数的名称就代表函数的地址,因此我们直接将符合条件的函数的名称赋值给这个指针。 并且我们两种方法可以通过指针来调用这个函数。

    4.2K81

    C语言——指针

    目录 指针是什么? 指针变量 使用指针变量的例子 通过指针引用数组 &数组名vs数组名 野指针指针成因 如何避免野指针 指针运算 指针是什么?...指针c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简洁,紧凑,高效,每一个学习和使用c语言的人,都应当深入了解地学习和掌握指针,可以说,不掌握指针就是没有掌握C的精华也可以说...指针C语言的灵魂(doge) 由于通过地址能找到所需的变量单元,可以说,地址指向变量单元,打个比方,一个房间的门口挂了一个房间号2008,这个2008就是房间的地址,或者说,2008"指向"...下面来看一段代码: 这里我们可以发现p跟p+1相差1 这里c是多少呢 ?...16进制的C的10进制是12,所以q+1和q相差4  p是整型指针相当于sizeof(int)=4 q是字符型指针相当于sizeof(char)=1; 以上就是我归纳指针的一些小结 如果能帮助友友们 -

    2.3K20

    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语言指针

    计算机的 存储器 容量是以 字节 为最小单位来计算的,对于一个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位机器上,指针变量的大小是

    19030

    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语言指针)8

    qsort 是C语言中的一个库函数,使用 qsort 库函数需要包含头文件 。这个函数是用来对任意数据类型的数据排序的。...我们先来了解一下 qsort 函数的用法: 以下图片均截自:C 标准库头文件 - cppreference.com ,更多详细内容请跳转查看。...在 C语言指针)2 中我们说过这么两段话: 虽然void *类型的指针不能直接进行解引用操作,也不能 +- 整数的操作, 但是当我们不知道别人给我们传的地址是什么类型的时候,我们就可以放心地去用void...其实细心的朋友已经知道了,因为我们之前给出的截图中已经两行大字明确说明了这种写法的风险,并且推荐了更加科学的写法。...结构体成员访问两种方法,一种是我们用过的 " . " 结构体成员访问操作符,还有一种就 是 “->” 结构体成员访问操作符。

    8410

    C语言指针)9

    2、数组和指针试题解析 我们之前说过,数组名表示数组首元素的地址,但是两个特例:sizeof(数组名)和 &数组名,这时候的数组名表示的是整个数组,sizeof(数组名)计算的是整个数组的大小...首先来看第一个,++pcc使指针pcc指向了数组pc的第二个元素,解引用得到了第二个元素c+2,c+2也是一个指针,指向的是数组c的第三个元素,再解引用就得到了数组c的第三个元素也就是字符串“point...再来看第二个,首先算++pcc,因为之前pcc已经指向数组pc的第二个元素,所以这次++pcc使指针pcc指向了数组pc的第三个元素,解引用得到了第三个元素c+1,c+1再--变为cc是数组名是其数组首元素的地址...,解引用就得到了数组c的第一个元素也就是字符串“enter”首字符‘e’的地址,‘e’的地址(指针)+3得到了第二个‘e’的地址,用%s打印出“er”。...pcc经过之前的两个自增运算已经指向了数组pc的第三个元素,此时-2指针pcc又重新指向了第一个元素,解引用得到c+3,c+3指向的是数组c的第四个元素,解引用得到字符串“first”首字符‘f’的地址

    6410

    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 指针±整数 我们都知道数组在内存中是连续存放的,只要知道首元素的地址就可以顺藤木瓜知道后面元素的地址

    6510

    C语言指针详解

    参考链接: C/C++指针与Java引用 前言 这不是我第一次写关于C指针的文章了,只是因为指针对于C来说太重要,而且随着自己编程经历越多,对指针的理解越多,因此了本文。...然而,想要全面理解指针,除了要对C语言熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以我想通过一篇文章来尽可能的讲解指针,以对得起这个文章的标题吧。 为什么需要指针?...空指针  指向空,或者说不指向任何东西。在C语言中,我们让指针变量赋值为NULL表示一个空指针,而C语言中,NULL实质是 ((void*)0) ,  在C++中,NULL实质是0。  ...既然是存放在内存中,那么函数也是自己的指针的。  C语言中,函数名作为右值时,就是这个函数的指针。  ...附加知识 指针和引用这个2个名词的区别。他们本质上来说是同样的东西。指针常用在C语言中,而引用,则用于诸如Java,C#等 在语言层面封装了对指针的直接操作的编程语言中。

    2.1K20

    C语言C语言数组和指针

    ---- 友情提醒:本文可能是全csdn最详细的指针内容了,希望你能用心读下去 前言 接下来的讲解部分是指针的进阶,包含多种指针以及对应的数组,这部分章节对我们来说很重要,也是c语言中的重点模块儿,重要性不言而喻...(c/c++会把常量字符串储存到单独的一个内存区域中) 当这两个指针指向同一个常量字符串时,实际上就是指向同一块儿地址**(指针就是地址,地址就是指针)** 2.数组指针 2.1数组指针的定义 1.数组指针嘛...,那其实非常简单,就是指向数组的指针,数组哪些组成部分呢?...这里补充一个小知识点,指针的类型可以决定,指针±整数一次性跳过多少个字节 ,之后再进行解引用操作,就可以拿到相应的元素了 不足之处: 这里很多人,感觉这样访问数组元素的方法比较智障,我也感觉很智障,...一定要记住了 也是很重要的知识:我们再设计函数参数来接收地址时,两个选择,你觉得哪个方便就用哪个,一个选择是用指针接收地址,另一个选择是,就用它本身去接收他自己(这个非常重要,因为我怕你在平常阅读代码的时候

    64.7K37

    C语言指针进阶:字符指针&&数组指针&&函数指针

    ✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 ---- 感谢您的点赞与关注,同时欢迎各位有空来访我的平凡舍 --...指针的大小是固定的4/8个字节(32位平台/64位平台)。 指针类型,指针的类型决定了指针的±整数的步长,指针解引用操作的时候的权限。 指针的运算。...了前面的一些指针的基础之后呢,我们将从这篇博客开始,开始一起探究指针的高级主题:指针的进阶,将通过不止一篇的博客讲完这部分的内容,下面一起来看一看> ---- 字符指针指针的类型中我们知道一种指针类型为字符指针...C/C++会把常量字符串存储到单独的一个内存区域,当指针指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。...];//二级字符指针的数组 指针数组,反过来想:那有没有数组指针

    2.8K20

    C语言指针进阶

    一、指针变量 指针变量字符指针变量,数组指针变量和函数指针变量 1、字符指针变量 char* 叫做字符指针 一般这么来使用:通过指针存储指针后解引用访问 int main() { char c =...'a'; char* p = &c; *p = 'a'; return 0; } 另一种使用方式: 将字符串首字符h的地址放入pstr指针当中 int main() { const char...C++会把常量字符串存储到单独的⼀个内存区域,当几个指针指向同一个字符串的时候,他们实际会指向同一块内存。...; } else { printf("请重新输入\n"); } } while (input); return 0; } 四、typedef 关键字讲解 typedef 是C语言中用来重命名的一个关键字...= 10; printf("%d", c); return 0; } 一个挺有意思的关键字,在以后工作和学习中,我们可以早早定义好比较常用的类型,提高工作效率 但是在其使用时,数组指针和函数指针的重命名和上述方法一些不同

    6910

    C语言指针)2

    3、指针变量类型的意义 既然指针变量的大小与类型没有关系,那为什么还要有不同的指针类型呢? 在某些情况下,指针类型还是很大意义的。...因为,指针类型决定了对指针解引用的时候多大的权限,也就是一次能操作几个字节。这就是指针变量类型的意义。...但是一定的局限性,void *类型的指针不能直接进行指针的 +- 整数和解引用运算。了解了上面的内容,这其中的原因相信我们已经心知肚明。...其实,我们 char *pc = &a;是问题的,&a取出的地址毕竟是int *类型。...不过,虽然大多数的人都是守法公民,但还是个别不听劝的,非要 “翻窗户”,那有没有办法解决呢?答案肯定是有的,因为我们不能容忍任何一个人不 “遵纪守法”。

    8910

    C语言指针)5

    8、字符指针 类似于整型指针,字符指针我们并不会感到陌生,因为用法跟整型指针很像: 下面介绍一个不一样的用法: 上面的两个指针变量pa和pc什么区别呢?...C/C++会把常量字符串存储到单独的一个内存区域,当几个指针指向同一个字符串的时候,它们实际会指向同一块内存。...9、数组指针 9.1数组指针的创建 前面说了指针数组,这里再来了解一下数组指针。...我们知道指针的类型取决于它所指对象的类型,比如整型指针指向的是整型所以整型指针的类型为 :int *,字符指针指向的是字符所以字符指针的类型为: char *,那同样的数组指针指向的是数组所以数组指针的类型就应该为...9.2数组指针指向指针数组 说到这里又有一个问题需要我们思考,数组指针是存放数组地址的指针,那指针数组也是数组啊,将指针数组的地址存到数组指针内该如何存呢?

    5910

    C语言——指针(四)

    ,能够指向数组的指针变量 我们来看下面哪个是数组指针(注意看类型): int *p1[10]; int (*p2)[10] 答案: p1是:数组里十个元素,每个元素的类型是int*的指针数组...p2是:指向数组,这个数组十个元素,每个元素的类型是int的数组指针 解释: 在这里我们要注意符号结合的优先级:[]的优先级高于*号 1)p1先与[10]结合→构成一个10个元素的数组,数组的类型为...int* 2)p2在()的限制下,先与*号结合构成指针,指向的是十个元素的数组,数组的类型是int 下图是数组指针类型的解析: 2,数组指针的初始化 和其他类型的变量初始化相似,只需给变量赋一个符合类型的值就行了...三,函数指针变量 函数指针变量就是用来存放函数的地址的指针变量 了函数的地址以后,我们就可以通过地址来调用函数 1,函数的地址 函数有没有地址?...我们做个测试 我们发现:1,函数也是地址的,可以用 &函数名 来获得,2,函数名表示的是函数的地址 2,创建函数指针 函数指针的写法与数组指针类似,下面进行函数指针创建的展示 void test

    9410

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券