如何正确使用指针数组?(警醒)

代码评审辅助:在 Code Review 阶段用大模型自动拦截空指针与越界异常 2026年5月的一个寻常下午,某支付团队的CI流水线突然亮起红灯。原因是一条合并请求触发了pre-commit大模型审查——一个未判空的参数被传入了下游的转账方法。评审机器人不仅给出了精确的修复建议,还在PR评论中附带了可直接复用的patch。整个过程耗时不到3秒。而就在一年前,同一个团队因为一次空指针异常导致生产环境宕机2小时,直接损失超过百万。这不是科幻,这是2026年AI代码审查工具的真实能力。 阅读详情

如何正确使用指针数组?
程序代码:
#include <stdio.h>
void man(int*a[]);
void exchange(int*x,int*y);
int main()//求输入10个数求最大最小并把最大和最后一个数换最小和第一个数换,其它数的位置不变并输出要求必须用指针;
{
    int*a[10],i;
    int b[10];
        /*
            for(i=0;i!=10;i++)
        scanf("%d",a[i]);
           
*/
    for(i=0;i!=10;i++)//求最大和最小;这里为什么不能直接写成上面注销的那样呢?运行程序时提示程序出错!
    {
        scanf("%d",&b[i]);
            a[i]=&b[i];
    }
      man(a);//这里传递过去的是什么呢?
        for(i=0;i!=10;i++)
        printf("%-4d",*a[i]);
        printf("\n");
return 0;
}
void man(int*a[])//求最大和最小;
{
    int i,*max,*min;
    max=min=a[0];
    for (i=1;i!=10;i++)
    {
        min=a[i]>max?a[i]:max;//这里更是不懂为什么比较地址就能求最大和最小开始写*min=*a[i]>*max?*a[i]:*max;也是不行,后来改成这就行了!
        max=a[i]<min?a[i]:min;//
    }
   exchange(min,a[0]);
   exchange(max,a[9]);
}
void exchange(int*x,int*y)//交换位置;
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}




int*a[10];

楼主其实自己都有怀疑,所以偷巧写成那样,这个其实应该写成:
int* a[10];  (写成int *a[10];也是符合语法的,但会误导自己,以为指向的是int型数据,但编译器不会理解错,是你自己理解错)
表示a是储存10个int*指针的数组,是10个指针,不是10个int数据,所以这些指针全部是没有指向数据实体的,当把a[i]传给scanf()函数,scanf()把这个a[i]里面的指针值视为某个int型数据实体的地址,要对它进行解引用,给那个地址处的内存赋值,由于指针a[i]没有初始化,所以崩溃。

对,在语法上,编译器接受scanf("%d", a[i])这样的编码,但那仅仅是过了语法检查关,并不表示运行也能正确。scanf()需要指针,你就给它指针,但指针指向对不对,编译器是无法检查出来的。

不要把int* i当作定义了一个int数据,这是我反复说过的。有人必然有名片,但有名片不必然就有人,人是数据实体,指针只是名片,名片是可以乱印的。都把指针当神器,但如果不深刻了解,只能是搬起石头砸自己的脚。写出int*a[10]这样的代码,必须自己很清楚那是什么意思,能够怎么用,必须怎么用,搞不清楚,就老老实实地定义int a[10],就如下面int b[10]能用一样。定义指针之后,总得在内存中开辟数据实体,除了数据实体本身占用的内存之外,还附带多了一个指针变量也占用内存的开销,省不了内存(其实按指针寻址是间接寻址,操作是先取指针地址值定位地址然后再取值,步骤比直接寻址多了两步,时间上也不占优),但更容易令你出错。指针用在该用的地方,而且能不用就尽量不用,不要被人误导,总想用指针显威风,没有任何一本编程实用指南指导程序员尽量采用指针。信不信由你,未出校门的人就喜欢中这种毒,将来害死你的时候,不要后悔。

指针,是在程序的实际迫使不得不用,或者能够使代码显得更清晰、表达更自然的时候,应该采用。如果不具备这样的效果,就不要用,哪怕牺牲一点点速度性能,也要优先保证代码的清晰性和可维护性,这才是正确性的保障基础,代码不清晰,连排错都成问题,排错的时间比赢得的那一点点毫秒级的时间多不知几千万倍,论人工按时间摊下来的成本,那么一点速度优势弥补得来吗。做项目的头儿,如果不懂衡量取舍这种综合关系,纯走技术路线,他根本没资格坐这位置,而凡是有这种观念的人,都注定不是做项目头子的料,不管他吹得多牛,一说这种话,就彻底暴露,要么是撒谎,要么是哪个傻瓜老板被南郭先生骗了。

Pi0 项目复现及项目问题解决方案(全网抢先发布~) 阅读详情

相关推荐

【遥感数字图像处理(朱文泉)】第一章 数字图像基础

关于图像的定义、类型、模拟图像和数字图像

甜子yu的博客 4404

【C语言】strcpy()函数详解(字符串拷贝函数)

有关C语言库函数strcpy()函数的详解,内容包括:函数简介,参数及返回值分析,函数的具体使用示例,模拟编写程序实现strcpy()函数功能等相关内容.

C/C++领域,数据结构,linux,MySQl学习者 6万+

Jasper Report使用JSON数据源创建报表

最近在做一个项目小功能,表单结案要生成PDF报表。 起初,想用HTML模板(art-template模板引擎)编写,利用浏览器的打印功能保存成pdf文件下载。但是HTML编写好的模板,页码、页眉、页脚设置有坑,表单内容中的表格较多,表格不能设置跨页,导致跨页的表格内容与页眉重叠,没能解决这个问题。 于是,转战研究Jasper report生成报表,用更加专业的报表生成工具来做。刚开始,也是跌跌撞撞,遇到了很多问题,因为觉得没有退路了,必须要用这个搞出来,所以就硬着头皮去找各种资料。 主要使用的json

xiaogege2012的专栏 3320

strcpy函数详解:字符串【复制】的利器

strcpy函数详解及模拟实现strcpy函数

天行健、君子以自强不息 2万+

「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到技术原理再到业界常用检测工具推荐

软件成分分析(Software Composition Analysis,SCA)是一种用于识别和分析软件内部组件及其关系的技术,旨在帮助开发人员更好地了解和管理其软件的构建过程,同时可帮助安全人员揭秘软件内部结构的神秘面纱。SCA技术的发展与软件行业的快速发展密不可分,下面将介绍SCA的发展背景、技术原理以及当前主流SCA工具。

所有成功的背后,都是痛苦的坚持,所有的痛苦,都是傻瓜般的不放弃! 5634

病理组学分析系列教程1:使用Python-histolab进行病理图像预处理,tiles切片自动生成

病理图像tiles自动生成,WSI图像预处理

qq_43449643的博客 1742

【字符串函数】strcpy的使用及原理

1.strcpy函数的函数声明 2.strcpy函数的头文件 3.strcpy函数的使用 4.my_strcpy函数的实现 1.strcpy函数的函数声明 char *strcpy( char *to, const char *from ); 2.strcpy函数的头文件 #include <string.h> 3.strcpy函数的使用 strcpy函数是将一个字符串的全部内容(包括'\0')拷贝到另一个字符串里。 #include <std

m0_64318128的博客 5万+

CSRT跟踪算法的使用

Fu Xianjun. All Rights Reserved. 文章目录 前言 一、CSRT跟踪算法是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、CSRT跟踪算法是什么? 在具有通道和空间可靠性的判别相关滤波器(DCF-CSR)中,我们使用空间可靠性图将滤波器支持调整为从帧中选择区.

sinat_53821602的博客 7906

strcpy()函数(浅理解)

strcpy是string copy的缩写,即字符串的复制,将一个字符串内容复制到另一个字符串中;strcpy()中arrayName1 要有足够的的长度,否则不能全部将入所拷贝的字符。

JUIU9527的博客 8846

手把手教你用组态王KingSCADA 3.53读取S7-1200 PLC数据(保姆级图文教程)

本文提供了一份详细的组态王KingSCADA 3.53读取S7-1200 PLC数据的实战教程,涵盖从硬件连接到软件配置、变量映射到故障排查的全流程。特别针对初学者常见问题提供解决方案,帮助工程师快速实现稳定通信,提升工业自动化系统效率。

weixin_26876073的博客 677

固定翼飞行器建模(二)——MATLAB/Simulink建模、配平及线性化

MATLAB/Simulink固定翼建模、配平及线性化。

2302_80148937的博客 1万+

strcpy函数详解看这一篇就够了-C语言(函数实现、使用用法举例、与strncpy的区别)

首先要明确strcpy的功能是:将参数src字符串拷贝至参数dest所指的地址 目录 函数介绍 与strncpy的区别 函数实现1: 函数实现2 改进: 用法示例: 函数介绍 函数原型:char*strcpy(char*dest,const char*src) //将src复制到dest字符数组中 头 文 件:#include <string.h> 返 回 值:char* 类型,返回的是第一个参数的值,即一个目的字符的首地址; 注 意: 1、strcpy...

kim的博客 7万+

告别QQ截图!用C# Winform + 百度AI,自己动手做一个免费的文字提取小工具

本文详细介绍了如何利用C# Winform和百度AI OCR接口开发一款免费的文字提取工具,替代QQ截图功能。通过智能截图模块、OCR服务集成和主界面功能整合,实现高效准确的文字识别,适用于日常办公和学习场景。工具支持图像预处理、异步处理和错误日志记录,提升用户体验和识别准确率。

weixin_30566063的博客 380

指针数组

#includevoid main(){ int ai[9]={1,2,3,4,5,6,7,8,9}; int*begin; int *end;    begin=ai; end=ai+9; cout cout while (begin!=end) {  cout        ++begin; } cout char *p; p="mazhiyuan~!"; int n=3; p=p+n; co

mmzsyx的专栏 495

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

sizeof() 计算字符型指针数组元素个数时要注意

前言一直以来,计算一个变量所占用内存的字节数,习惯使用sizeof() 这个关键字, 这个关键字有点特殊,还带有个括号。其实不带括号也是的,用空格代替,但是审美上,就没那么美观了。问题再现#include "stdio.h" int main(int argc, char *argv) { const char *acStr[3]= {"111","222","333} int i;

专注于 IOT 物联网的嵌入式研发 5271

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C语言指针第3篇——共5篇

一、字符指针变量 二、数组指针变量 三、二维数组传参的本质 四、函数指针变量 1、函数指针变量的创建 2、函数指针变量的使用 3、《C陷阱和缺陷》中两段代码 4、 typedef 关键字 五、 函数指针数组 六、转移表

YUYUJOB的博客 153

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

傻瓜式错误,关于使用位异或交换整型指针指向值时产生的困惑

我首先检查了cv函数,当然,我并不认为它有问题,因为很多地方都调用了它,我就是想看看是哪部分产生的问题。这时候思路就出现了问题,我把x,y当作了普通值去考虑,方便位运算嘛😄,结果我拿着两个相等的值(也就是出问题的那里,奇数时出问题的位置是指向同一个值)在那算了一遍,没问题呀,思路已经进入了拐角,还觉得自己特对😂。在cv函数的第一行语句执行时,y指向的值会置为0,这时由于x,y指针指向的是同一地址,所以x指向的值也置为了0,这里就是跟数学思考分叉的地方:D ,后面就不用说了,肯定就是零了。

qq_22041917的博客 141

记一次失败的面试题

写在前面,这是前几去面试一份笔试题,自己做的简直太糟糕了,暴露出了自己的基础知识实在是太不扎实了,自己面试也没有什么准备,所以就将题带回来了,现在完整的做一遍,警醒自己也作复习之用。 1、程序的局部变量存在于(堆栈)中,全局变量存在于(数据段)中,动态申请数据存在于(堆空间)中 注意:初始化过的全局变量存在于数据段中,未初始化的存在于bss段。 2、下列语句中p的含义 int *p[n];...

bxg1065283526的博客 412

QT--内存错误导致程序崩溃

提示:本文为学习记录,若有错误,请联系作者,谦虚受教。 文章目录前言一、问题点1.C:\Program Files (x86)\SogouInput\Components\2.错误操作3.解决方法二、找出问题点1.Debug三、野指针和空指针1.[野指针](https://baike.baidu.com/item/%E9%87%8E%E6%8C%87%E9%92%88/9654046?fr=aladdin)2.[空指针](https://baike.baidu.com/item/Null/1966038.

我有一颗薄荷糖的博客 6394

Java中用List的addAll()方法添加一个list时,报空指针异常java.lang.NullPointerException: null

在list中使用addAll()添加一个list时,报空指针异常:网上找错发现我初始化时使用的是: List<Entity> entitys= null; 后来改为 List<Entity> entitys= new ArrayList<>(); 网上查找原因:只在栈中有引用而在堆中没有分配到内存空间 所以报错。记下来警醒自己 ...

cx-young的博客 3356

C语言学习-结构体

结构体:我重生了,重生回到了刚学结构体的那一天,上一世我不可一世,以为学完C语言已天下无敌,直到遇到了}Node;数据结构(链表), 我的天哪,我不敢了,结构体大人,我看不懂,我太不自量力了,这一次我下定决心一定要好好学习结构体。因此,我决定写下这篇博客来警醒后面的人(doge)。总之,结构体是后续学各种数据结构的基础,加油吧!前面学过一般的指针,字符指针,数组指针,函数指针。结构体指针是一种指针,这种指针变量是指向结构体的。这种指针有什么用?结构体指针变量存储结构体变量的地址。

博客网站地址: https://arsenova.xyz 我会将优快云上的博客重修一部分迁移到网站上。 文章会做同步更新,但我不会在这个糟糕的平台多待1秒。下面是我要说的话,save your time. keep going 7547

iOS 中由数组 NSArray 与 NSMutableArray 的使用理解偏差引发的多宗血案

iOS 中由数组 NSArray 与 NSMutableArray 的使用理解偏差引发的多宗血案!多乎哉?不多矣。

太阳火神的美丽人生 2065

11.20 至 11.27 五道典型题记录: 贪心 | 应用题 | 脑筋急转弯 | 区间问题 | 双指针

松懈了最近,要时刻保持警醒啊!学习不能停,说那么多的借口不如花一些心思去学一些知识,之所以学到的内容不成体系,一方面就是学得少,没多少墨水,怎么也无法高度概括地找到一些骨架性的内容,另一方面需要坚持去学习,长时间全神贯注地做一件事情,并把它做好!我始终相信 善始善终和勤能致富,所以要放下一些自己的没用的执着,这篇过后所有的算法题都会加入 C++ 的语言编程,另外有关机器学习的内容现在有时间梳理了,可以找时间认真地学习了,总之,别让自己 娱乐至死,让自己的脑袋思考起来,记起来。

weixin_42269028的博客 496

关于字符串和memset,需要注意的地方

懒惯了,又是很久很久没有写这些东西了。 基于自己前段时间犯的一个错,特写下这篇文章来警示自己! 前段时间,自己写了如下的一段代码:char *pBuff = new char[20]; memset(pBuff, 0, sizeof(pBuff)); pBuff = "hello,world!"; cout<<pBuff<<endl; delete []pBuff;这段代码编译时没问题,可一运行

pimananjue的专栏 2883

Day07 哈希表part02

第七天:哈希表part02。

yht724的博客 615

LeetCode:Valid Parentheses && Remove Duplicates from Sorted Array

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type ...

remanented的博客 149
上一篇: 1007. 素数对猜想
下一篇: 带符号的char类型取值范围为什么是-128——127
吴贝贝97
博客等级 码龄10年 68粉丝 333原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值