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

C指针,我做错了什么?

C指针是C语言中的一种数据类型,用于存储变量的内存地址。它可以指向任何数据类型的变量,包括基本数据类型(如整型、字符型等)和复合数据类型(如数组、结构体等)。通过使用指针,我们可以直接访问和修改内存中的数据,提高程序的灵活性和效率。

在C语言中,使用指针时可能会出现一些常见的错误,下面列举了一些常见的错误以及解决方法:

  1. 未初始化指针:在使用指针之前,必须先将其初始化为一个有效的内存地址,否则会导致未定义的行为。可以通过将指针赋值为NULL或者指向一个有效的内存地址来进行初始化。
  2. 野指针:野指针是指指向无效内存地址的指针。使用野指针可能导致程序崩溃或产生不可预测的结果。避免野指针的方法是在指针使用完毕后将其置为NULL,或者避免使用未初始化的指针。
  3. 指针越界:当使用指针访问数组或其他数据结构时,必须确保不超出其边界。否则,可能会访问到无效的内存区域,导致程序错误。可以通过检查数组长度或使用循环来遍历数组来避免指针越界。
  4. 内存泄漏:内存泄漏是指在程序中动态分配的内存没有被正确释放。如果频繁地分配内存而不释放,会导致内存耗尽,最终导致程序崩溃。为了避免内存泄漏,应该在使用完毕后使用free()函数释放动态分配的内存。
  5. 指针类型不匹配:指针的类型必须与其指向的变量类型匹配,否则会导致类型不匹配的错误。在进行指针类型转换时,应该使用适当的类型转换操作符来确保类型匹配。

总结起来,正确使用C指针需要注意以下几点:初始化指针、避免野指针、避免指针越界、释放动态分配的内存、确保指针类型匹配。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言指针函数参数,指针函数返回类型

指针函数参数: 在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。...但是 传递地址的时候,总会导致一些问题,C通常安值传递数据,因为这样可以保证数据的完整性,如果函数使用的是原始的数组的副本,就不会发生修改原始数据,但是,处理数组的函数通常都需要使用原始数据,因此这样的函数可以修改原数组...,有时,这正是我们需要的:void add(double a[ ],int n,int b); 调用此函数,将可以将原来数组的值进行修改,也可以说是函数通过指针,直接将原数组修改了 数组是一系列数据的集合...因为把数组传入函数时传递的是地址,所以那个函数内部可以修改数组的值, 为了保护数组的值不被函数修改破坏,可以设置参数为const: int sum (const int a[ ],int b); C语言为什么不允许直接传递数组的所有元素...而覆盖它的究竟是一份什么样的数据我们无从推断(一般是一个没有意义甚至有些怪异的值)。

2.5K20

c专题之指针-----什么指针

前段时间看见大家在积极的讨论指针有关的问题;这不由的让想起当初自己学习指针,真是要了老命啊,一直没搞懂带"*"的问题,一个带"*"还好理解,多了就晕了,回忆起来,这是当初的“死板”学习;现在做嵌入式...在今天开始写文章之前,插一个面试题,也是自己这几天无意发现的;这里以一个void set()函数,和void set1(void)函数(c语言里面没有函数重载这个用法,所以就这样区分写了)为示例:...一、什么指针?...要知道,指针变量也是一个变量,在内存中也是占内存的,只不过它不存放基本类型数据,而是存放其他基本类型变量的地址。既然指针变量也有自己的物理地址,那么指针变量的地址用什么 来存储呢?...,&b,&c,&d,都是打印指针本身的地址(也就可以印证上面说的话,指针和普通变量一样,都有自己的地址)。

28320

C++】函数指针 ④ ( 函数指针函数参数 | 使用函数指针间接调用函数 | 函数指针参数 | 函数指针类型的本质 | 函数指针参数意义 )

一、函数指针函数参数 1、使用函数指针间接调用函数 在上一篇博客 【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用..., 调用的函数可以动态指定 ; 2、函数指针参数 定义了 如下 函数指针类型 pFun_add , 其类型为 int (*)(int, int) , 该指针指向一个 类型为 int (int, int...%d\n", fun(x, y)); return fun(x, y); } 定义 caculate 函数时 , 只定义了 在函数体内部 要调用 int (int, int) 类型的函数 , 具体是什么函数..., 就可以将其作为一个 子任务 传递到 其它函数中执行 ; 4、函数指针参数意义 函数指针参数意义 : 提高程序灵活性 : 通过使用函数指针作函数参数 , 这样可以 在 程序 运行时 动态地 设置...错误处理 : 使用函数指针 , 将错误处理函数作为参数传递给其他函数 , 在发生错误时立即调用适当的错误处理函数 , 无需返回到调用堆栈中的较高层次 ; 二、代码示例 - 函数指针函数参数 代码示例

28750

C语言中“野指针”、“悬空指针”是什么

1、“野指针”(wild pointer) “野指针”(wild pointer):是没有被初始化过的指针,所以不确定指针具体指向。...在实际的C语言程序开发中,定义指针时,一般都要尽量避免“野指针”的出现,可通过赋初值方式解决: void *p = NULL; void *data = malloc(size); 2、“悬空指针”(dangling...通俗点可以理解:指针指向一块内存,如果这块内存稍后被操作系统回收(被释放),但是指针仍然指向这块内存,那么,此时该指针就是“悬空指针”。...例如以下示例代码: void *p = malloc(size); assert(p); free(p); // 现在 p 是“悬空指针C语言中的“悬空指针”会引发不可预知的错误,而且这种错误一旦发生...所以在实际的C语言程序开发中,为了避免出现“悬空指针”引发不可预知的错误,在释放内存之后,常常会将指针 p 赋值为 NULL: void *p = malloc(size); assert(p); free

1.5K50

C++开发

C++11标准出来之前,你返回个对象心里都惴惴不安,怕new之后忘了delete,怕内存泄漏,怕影响效率什么的。现在C++11,14标准出来以后,写代码没有那么痛苦了,跟写脚本差不多了。...什么rvo copy ellision,各种优化过程都成为标准了,返回对象根本不是问题。还有智能指针加持,一般都很难写出内存泄露的代码来。就拿occt来说,通篇都找不到一个指针操作。...并且C++嵌入python,就能用python二次开发,嵌入js ,就能用js开发。你就是图个方便!...再说说C#,很多软件的二次开发都用它,比如Autodesk全家桶,这些软件的二次开发也很容易。如果只在win下的话,C#确实比较方便。然而,C#非常封闭,不能跨平台。...关键C#又不是生态像py,C++那么庞大,搞得不好就得自己造轮子了。工业软件就没人用C#,写界面不能跨平台,写求解器更是难(C++的数值计算库很多)。

85760

C++中指针什么

参考链接: C++指针 以下问题都是在学习C++的指针时比较浅显的一些个人的理解  1:什么指针?  回答这个问题之前,先想想什么是内存地址?...我们在程序中定义一个变量,系统会自动分配一个内存地址,在C++中地址可以通过‘&变量名’这种格式来获取。       ...指针其实也是一种类型,像int ,char一样,只不过指针变量存放的是内存地址  2:指针的声明(例:int类型)  int main(){     int in1=18;     int* pi1=&...3:声明指针的两种方式  int main(){     //方式一      int in1=18;     int *pi1=0;//这个0代表的不是数值,代表的是NULL,如果声明指针的时候给了数值那么指针会指向不合...指针变量之间是可以进行运算的,例如+1,-1,但是指针的运算和其他类型的变量运算可不一样,指针的运算是对地址的操作,所以我觉得没有任何意义,但是如果指针指向的是数组,那么用指针运算就是指向数组内元素的不同地址

30530

初识C语言——初识指针什么是内存,什么指针指针变量怎么用,指针的大小)

要认识指针,首先我们要知道什么是内存。 1.内存 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。...在C语言,有一种专门用来存储地址的变量,叫做指针变量。...指针变量的定义方法: 类型 * 指针变量名;(*说明该变量是一个指针变量) 我们来演示一下: int num = 10; int *p;//p为一个整形指针变量 p = # 这样就把一个整型变量的地址放到了一个整型指针变量里边...("%c\n", ch); return 0; } 3.指针变量的大小 思考一个问题,整型变量的大小是4个字节,char类型1个字节,double8个字节,那么指针变量的大小是多少?...为什么不同类型的指针变量大小是一样的呢?又为什么是4个字节呢? 原因是: 指针是用来存放地址的,所以指针变量的大小取决于地址的大小,而在同一平台上地址的大小是固定不变的。

21810

C语言中“指针”和“指针变量”的区别是什么

比较严格的说法是这样的: 系统为每一个内存单元分配一个地址值,C/C++把这个地址值称为“指针”。如有int i=5;,存放变量i的内存单元的编号(地址)&i被称为指针。...“指针变量”则是存放前述“地址值”的变量,也可以表述为,“指针变量”是存放变量所占内存空间“首地址”的变量(因为一个变量通常要占用连续的多个字节空间)。...比如在int i=5;后有一句int *p=&i;,就把i的指针&i赋给了int *型指针变量p,也就是说p中存入着&i。所以说指针变量是存放指针的变量。...有一个事实值得注意,那就是有不少资料和教科书并没有如上区分,而是认为“指针指针变量的简称”,如对int *p=&i;的解释是:声明一个int *型指针p,并用变量i的地址初始化;而严格说应该是声明一个...int *型指针变量p才对。

57130

什么指针被誉为 C 语言灵魂?

在这里想谈几个看起来有点无聊的话题: 为什么我们需要指针?直接用变量名不行吗? 当然可以,但是变量名是有局限的。 变量名的本质是什么?...自己先思考下噢~ 接下来分析下这个过程发生了什么: ?...实际上,我们是完全可以用 C 语言去模仿的。 这就是为什么一直说 C 语言是基础,你真正懂了 C 指针和内存,对于其它语言你也会很快的理解其对象模型以及内存布局。...那如果把书放在 05 号格子,然后在 03 号格子只放一个小纸条,上面写着:「书放在 05 号」。 你会怎么? 当然是打开 03 号格子,然后取出了纸条,根据上面内容去打开 05 号格子得到书。...不管几级指针有两个最核心的东西: 指针本身也是一个变量,需要内存去存储,指针也有自己的地址 指针内存存储的是它所指向变量的地址 这就是什么多级指针是逻辑上的概念,实际上一块内存要么放实际内容,要么放其它变量地址

70310

C++使用指针,动态数组,指针参数需要注意的问题等总结

前言 指针什么,有些萌新一听到指针就开始畏惧了,这种畏惧并不是来自指针给你的,而是他人给你的。相信基本所有人都会在刚学习的时候百度:C语言最难的是什么?包括。...通过网络上得到的一些信息,在没有学习指针之前,你便已经开始对指针存满了畏惧,在这里想说,只有自己经历了才有资格去评价它其实单讲指针其实也没什么,前面学习的基本变量,整形,浮点型,字符型,等等,现在多了一个指针形...答案是不论是什么类型的指针,都是占4个字节,因为地址用4个字节来存储是足够的,不要问为什么不知道。有时候,你只管像一个傻子一样去做事就好了。记住这句话。...指针或者数组函数参数 //文章最后再来说一说指针或者数组函数参数: int fun_1(int a[]) { } int fun_2(int * a) { } int fun_3(int a[10]...指针参数需要注意的问题 //指针作形参,需要注意的问题。

99010

什么应该使用指针而不是对象本身

问题 之前一直使用 Java,现在开始转向 C++。...发现使用 C++ 的人经常用指针表示对象,比如像下面这样: Object *myObject = new Object; 而不是, Object myObject; 或者在调用成员函数的时候,都会这样...: myObject->testFunc(); 而不是, myObject.testFunc(); 有点想不明白为什么这么?...回答 对于现代 C++ (尤其是 C++ 11 之后),大量使用 new 动态分配是不明智的选择。 下面从两个方面来解释: 什么时候该使用 new? 什么时候该使用指针?...当你确实要用动态内存分配的话,我们应该用智能指针或者其它的 RAII 技术来管理这部分资源。 什么时候该使用指针? 不过,除了动态分配内存之外,原始指针还有其它用途。

1.3K10

【说站】c语言中的指针什么

c语言中的指针什么 1、指针C语言的重要特征。它提供了引用数据结构(包括数组)元素的机制。 类似于变量,指针有两个方面:值和类型。...2、指针非常灵活,可以指向任何类型的数据。指针类型说明了指向地址空间的内存。 别忘了指针类型和变量名中间还有一个*号。没有这个*号,只定义了一个普通变量,这也是普通变量声明和指针声明的区别之一。...实例 int    *p;    /* 一个整型的指针 */ double *p;    /* 一个 double 型的指针 */ float  *p;    /* 一个浮点型的指针 */ char   ...*p;    /* 一个字符型的指针 */ 以上就是c语言中的指针的介绍,希望对大家有所帮助。...更多C语言学习指路:C语言教程 本教程操作环境:windows7系统、C11版,DELL G3电脑。

55540

当我 hackathon 时在做什么 (2)

书接上文:当我 hackathon 时在做什么(1)。 前文中提到,的第二个项目是个可视化的项目,名字叫 deneb。deneb 是天鹅座的一等星,也是夏季大三角和北十字两个星群的端点之一。...嗯,deneb - vega - altair,聪明的你一定想到了什么起这样一个名字: ? 为什么是 vega-lite? 在数据可视化这块,自己走了不少弯路。...如果你需要能够对可视化的图表简单的动画,plotly 也能胜任。 一度以为 plotly 是的真命天子,直到有一天敲开了 altair [4] 这个潘多拉魔盒。...", "data": { "values": [ {"a": "A", "b": 28}, {"a": "B", "b": 55}, {"a": "C", "b": 43},...第五次撞墙:IElixir 和 jupyter notebook 完成 ex_polars 就像打完自己的淮海战役一样, deneb 的过程是摧枯拉朽,几乎不费太大的力气。

2K10

什么要为开源社区贡献|你也应该这样

记得问,“你在玩什么游戏?” “还没给它起过什么名字呢,”他回答。不明白他的意思。 他为什么要叫它什么呢?然后他解释说,这是他自己用BASIC语言写的。 的大脑爆炸。...他认为有潜力,并提出每小时付给我15美元来写软件。那是一份相当不错的薪水,在公司的时间帮助我巩固了的技能,尤其是在C++方面,那是20世纪90年代中期最热门的编程语言。...喜欢软件工程师的工作,但我的劳动成果是公司的。不像我朋友的父亲那样,把置于他的庇护之下。 不高兴,但与此同时,的岳父一直告诉,如果百分之百地喜欢的工作,就会付钱在那里工作。...他告诉,除了经济上的回报,工作不需要提供任何东西,的经历也证实了他的观点。 的雇主在推销产品,让股东和董事会成员满意。这就是世界的方式。为更大的善贡献是你在业余时间或退休后的事。...问问你能做什么绕了一圈。这个从火箭科学家那里学会了编程的男孩现在是一名高级软件工程师,他正在帮助年轻人学习编程的诀窍,以便他们能够挑战计算机科学的边界。

72320
领券