再谈指针

从AI幻觉到Agent工程化:开发者如何驾驭生成式AI的失控与落地 生成式AI正从单纯的文本生成走向复杂的工作流集成,但随之而来的AI幻觉、工具链碎片化与部署成本问题,成为开发者绕不开的关卡。理解大模型的输出不确定性、掌握提示词工程的自校验技巧,是降低幻觉率的低成本起点;而AI编程助手与AI Agent框架的成熟,则让自动化编码与智能体协作成为可能。同时,视频生成、内容生产等场景的爆发,要求从业者从“能生成”转向“能控制、能盈利”。本文从基础概念与工程实践出发,梳理AI应用开发中的关键环节,涵盖模型部署、量化推理、Agent设计方法论,并结合真实排错案例,帮助读者在技术选型 阅读详情

前面大致对指针有一定的了解,最近在往后学习 的过程中对指针这玩意儿又有了新的理解。


我认为:指针有2个属性。

一:指针的值(value)

二:指针管辖的宽度(width)


# include <stdio.h>
int main (void)
{
	int arr[5]={1,2,3,4,5};
	
	int *p1=arr;
    int (*p2)[5]=&arr;
	
	return 0;
}


对指针p1来说,他的值是等于arr的(同样也等于&arr[0]),也就是p1指向数组的第一个元素。这里要强调一下的是,有些人把

数组名这个arr这个指针理解为指向数组的指针,这是错误的,它应该是指向数组的第一个元素的指针。




 对p1的宽度来说,它管理arr[0]所占的字节(图中画的是4个字节),也就是说:p1的宽度是sizeof (arr[0])


对于p2,我们从p2的类型可以看出,他是一个指向数组的指针,确切地说是指向有5个int类型元素的数组的指针。

p2的值是&arr ,有经验的coder会在脑子里第一时间想到:&arr  的 值 和   arr 是相等的。的确,因为指针的值就是

它指向的内存块的第一个字节的地址。

对于p2宽度呢?


可以看出:p2是指向数组的指针,它比p1“管得宽”一些。所以,&arr才是指向数组的指针。


这里扩展一下:p2+1  指向什么呢?

好吧,这里,我们的确是访问越界了,不过,还是有必要分析一下。

我们知道,在一个数组中,一个元素的指针+1,代表指向此元素下一个元素的地址,那么在这里,从二位数组的角度

来看,p2+1就是指向与这个数组在内存位置上相邻的下一个同样大小和类型数组的指针。也就是这样(即便这个数组不存在)

验证代码:

# include <stdio.h>
int main (void)
{
	int arr[5]={1,2,3,4,5};
	
    int (*p2)[5]=&arr;
	
	printf("%d\n",  *((int*)(p2+1)-1)  ); 
	
	
	return 0;
} 


通过上面的理解,我们又可以轻松理解一个我们知道该这样做但却不知道为什么这样做的例子

我们知道:要定义一个指针,就必须要指明指针的类型,也就是这个指针将指向什么类型的元素。

比如:

     int* p ;     //p是指向int元素的指针

     float * p   //p指向float型

     void (*p) (int ,int );    //p指向一个函数,该函数无返回值,有2个int型参数

   

好,我们写一个处理二位数组的函数,就要在函数的参数之一定义为一个指向二维数组的“第一个元素”的指针,

我们还了解,第一个元素,他是一个数组。

所以应该这样: void test  (int a[ ] [x]  ,....)

或者这样            void test  (int (*a)[x]  ,....)


我想说的 “知道该这样做却不知道为什么这样做”就是我们常常挂在嘴边的:形参的一维可以省略,但二维不能省略。

也就是上面的x不能省略,而且要是一个确定的常量。

为什么呢?到这里应该知道了吧。

上面2中定义方法本质上是第2种,也就是把参数定义为一个指向数组的指针。

既然是定义指针,当然要指明他的类型吶。上面数a是指向什么样的数组的啊?答:指向有x个int型元素的数组的。

可见,x是不可以省略的。

over







再谈指针:大佬给你拨开 C 指针的云雾 作者:Harris Wilde,http://www.techzone.ltd/post/CPointer/说到指针,估计还是有很多小伙伴都还是云里雾里的,有点“知其然,而不知其所以然”... 阅读详情

相关推荐

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5062

c51语言 code 函数指针,Keil C51 中的函数指针和再入函数

下面两个源文件将解答这个问题,使问题容易明白。第一个源文件FPCALLER.C,包括一个函数,它通过一个函数指针(fptr)调用另一个函数。voidfunc_caller(long (code *fptr) (unsigned int)){unsigned char i;for(i=0;i<10;i++){(*ftpr)(i);}}第二个源文件FPMAIN.C,包含C主函数和被func_ca...

weixin_29437633的博客 935

原理图分享二(信盈达CorexM4核心板STM32F407VGT6)

这是第二张板子的原理图分享,这也是当时大学里学习的一个板子。 原理图分享二(信盈达CorexM4核心板STM32F407VGT6)

让学习成为一种习惯 6901

c语言指向code指针,C语言——指向函数的指针

http://www.cnblogs.com/liangyan19910818/archive/2011/08/19/2145270.html1 函数类型 (* 函数指针变量)() ; //指向函数的入口地址一个函数是若干语句的集合 , 经编译后存储在函数代码存储区 , 并占有一片连续的存储空间 ,对函数指针只能用函数名赋值而无其他运算1 #include23 int max(int x ,i...

weixin_30999777的博客 417

别再死记硬背注意力机制了!用Python+PyTorch从零实现一个HAN(Hierarchical Attention Network)

本文详细介绍了如何使用Python和PyTorch从零实现Hierarchical Attention Network(HAN),通过代码级解析帮助读者深入理解层次注意力机制。文章涵盖词级和句子级注意力层的构建、完整HAN架构的实现、训练技巧及注意力可视化方法,特别适合希望掌握高级NLP技术的开发者。

weixin_28744423的博客 166

ESP32Servo库驱动SG90舵机:从入门到精准控制

本文详细介绍了如何使用ESP32Servo库驱动SG90舵机,从硬件连接到软件环境搭建,再到编写示例程序实现精准控制。内容涵盖库安装、基础驱动代码解析、舵机校准方法以及平滑运动控制,帮助开发者快速掌握ESP32控制舵机的核心技能,并提供了电源管理、信号抗干扰等实用避坑指南。

ik678901的博客 901

指针

指针 1.指针:对一个数地址的储存 指针的定义: int* p = &a; 指针的定义(举例说明): int main(){ int a = 10, b = 20; int* p = &a; // 定义一个整形的指针 p 并且 p 指向了 a 的地址 printf("%d",*p); // 一经解引用,即为取p(即为&a)的解引用,即取a地址的内容物 int** pp = &p; // 定义一个整型的指针 pp 并且 pp 指向了 p 的地址 printf("

Code_Paradise的博客 201

深入解析ST MC SDK(WorkBench)工程结构:从零搭建FOC电机控制项目

本文深入解析了ST MC SDK(WorkBench)工程结构,详细介绍了如何从零搭建FOC电机控制项目。通过ST MC SDK和WorkBench工具链,开发者可以快速配置电机类型、控制策略等参数,生成完整的FOC控制工程。文章还拆解了工程结构中的核心控制模块、HAL硬件抽象层、芯片系统初始化和电机控制算法库,并提供了无传感器FOC实战技巧和常见问题排查指南,帮助开发者高效掌握STM32F407ZGT6开发板上的FOC电机控制技术。

weixin_29173777的博客 414

谈指针色变

内存中存在许多空间,我们需要如何快如找到它?比如一栋公寓,有很多房间,你的朋友就住在里边,要如何快速找到朋友的房间?很简单,只需要得到房间的房间号,就能快速找到房间。同理,当我们要访问内存时,也需要得到内存的地址。内存也跟房间一样被划分成一个个内存单元,每个内存单元的大小取1个字节。每个内存单元大小一个字节,也就是8个比特位1个比特位可以储存一个二进制的1或0计算机中常见单位bit;byte;KB;MB;GB;TB;PB生活中,我们把门牌号叫地址。指针。

2301_81416743的博客 1894

ollama使用CPU安装qwen-coder模型_并在eclipse中使用ai coder插件_配置本地qwen-coder模型_ollama常用操作记录---AI大模型应用探索0002

文章摘要:作者分享了在Windows 10上安装和使用Ollama模型的过程。尝试了不同规模的qwen-coder模型(7b、1.5b和0.5b),发现7b模型响应极慢(需35分钟),而1.5b模型表现较好(3秒响应)。最终选择1.5b版本用于代码开发辅助,支持多语言自动补全。同时提到在最新版Eclipse中的AIcoder配置问题。文章重点比较了不同模型规模在CPU环境下的实际使用体验和响应速度差异。

添柴程序猿的专栏 687

10分钟极速SpringBoot项目搭建:OpenClaw AI实战攻略

OpenClaw,作为一款革命性的 AI 工具,凭借其强大的智能体能力,能够在短短 10 分钟内,帮助开发者从零构建一个完整的 SpringBoot 项目,实现真正的极速开发。它不仅极大地提高了开发效率,还降低了开发门槛,让更多的开发者能够专注于业务逻辑的实现,而无需被繁琐的配置工作所困扰

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 300

再谈双指针

再谈双指针

Legend(谭海燕)的专栏 1万+

如何使用Github创建一个完全免费的个人网站

摘要: 本文详细介绍如何利用Github Pages免费搭建个人静态网站,适合零基础用户。首先需注册Github账号并创建特定命名的仓库(格式:用户名.github.io),然后通过网页或命令行创建index.html文件作为网站首页。完成后可通过"仓库设置- Pages"获取网站链接。文章还包含GitHub Desktop的安装使用、代码提交指南及常见问题自检方法,并说明即使Github被墙也可迁移至国内平台(如码云)。整个过程无需编程基础,仅需15分钟即可完成基础网站搭建。

安德洛夫 1514

谈一下我对于指针的理解

--------------------转载请注明源地址: 对于指针,我是纠结了很久,很长一段时间都没有弄懂,指针到底是个什么玩意。查了不少资料:算是对于指针有了点理解,就写下来把; 在内存中,每一个变量都需要三个部分组成:变量名,值,变量在内存中的地址。先在我们有一个变量 int a =10; 指针是个什么玩意呢,这东西一般用来储存他人的内存指针。举例来说也就是上面所说的a的内存地址。姑且

徐坤很无聊 2773

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

再谈指针:大佬给你拨开 C指针 的云雾

说到指针,估计还是有很多小伙伴都还是云里雾里的,有点“知其然,而不知其所以然”。但是,不得不说,学了指针,C语言才能算是入门了。指针是C语言的「精华」,可以说,对对指针的掌握程度,「直接...

李肖遥的专栏 1065

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

又谈指针

 int  *a;......*a=12;这个声明创建了一个名叫a的指针,后面那条赋值语句把12存储在a指向的位置。而指针a指向一个未知区域。如果够幸运,指向一个非法地址,赋值语句出错,程序中止。在unix系统上,这个错误叫做内存错误或段违例。在一台运行windows的PC上,对未初始化或非法指针进行间接的访问操作是一般保护性异常的根源这一。对于那些要求整数必须存储于特定边界的机器而言

536

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

从使用指针的目的谈一级指针和二级指针

使用二级指针的最终目的:修改或引用指针指向的对象——址 使用一级指针的最终目的:修改或引用指针指向的对象——值 (1) 野指针、指针的地址(&ptr)、指针的指向(ptr) char *ptr1; char *ptr2=NULL; printf("ptr1=0x%x\r\n",ptr1); // ptr1=0x7efde000; printf("&ptr1=0x%x\r...

eagle_lee58的博客 469

也谈指针类型的区分

最近看了下之前的编程基础知识,发现虽然有很多工作中使用不算太频繁的,但是还是容易出错的地方。 比如const变量,比如指针数组和数组指针,函数指针数组。 结合之前看过的书籍,总的感觉是:把英语学好啊! 按照英语的读法来进行辨别,*代表了pointer of,因为都是指针,所以按照顺序总是先读pointer,但是const是限定词,所以如果有const显然需要放在前面进行限定。下面举例

chinaclock的专栏 828

谈一下我对于指针的理解 .

--------------------原地址:http://blog.youkuaiyun.com/u013082522/article/details/20250337 对于指针,我是纠结了很久,很长一段时间都没有弄懂,指针到底是个什么玩意。查了不少资料:算是对于指针有了点理解,就写下来把; 在内存中,每一个变量都需要三个部分组成:变量名,值,变量在内存中的地址。先在我们有一个变量 int a =10

u013855707的专栏 427

也谈指针运算

转自:http://tonybai.com/2010/02/23/also-talk-about-pointer-arithmetics/ 指针在C语言中的位置这里就不多说了,这里说一下C的指针运算。指针运算一般针对的是同一连续内存块,不同内存块之间的指针运算无意义,甚至可能导致异常情况。 指针运算主要针对数组,常见的运算类型:+i, -i, ++, –以及 等。 我们以+i操作

blue_jjw的专栏 667

再谈C语言——指针篇

数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针: int * pint;能够指向整形数据的指针。浮点型指针: float * pf;能够指向浮点型数据的指针。那数组指针应该是:能够指向数组的指针。

Lucas_Micheal的博客 928

再谈C指针

1.指针是一个保存对象地址的变量。这里要注意的是,指针跟地址概念的不同,指针是一种地址变量,通常也叫指针变量,统称指针。而地址则是地址变量的值。2.对一个一般类型的地址进行sizeof运算,结果是4个字节,而a[0]由于代表了一个数组,sizeof(a[0])的结果是整个数组的长度8x9xsizeof(int),并非4个字节。具有数组类型的地址跟数组名一样都是一个符号地址常量,因此它必定是一个

Good good study! 1271

再谈引用与指针的区别

引用与指针的区别: 常常有人问引用与指针的区别,可能是指针和引用在功能上的相似,而是他们混淆这两个概念, 现在总结以下二者的区别,希望大家能彻底弄清这两个概念根本性的差别: 引用,一个变量的别名,为什么引入别名呢?原因是我们想定义一个变量,他共享另一个变量的 内存空间,使用别名无疑是一个好的选择。变量是什么?是一个内存空间的名字,如果我们给这个 内存空间在起另外一个名字,那就是能够共享这个

青青的专栏--C/C++ OOA/D Design Pattern 7090
上一篇: static的作用
下一篇: 约瑟夫环问题的解决
love1code
博客等级 码龄12年 19粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值