C专家编程【美】Peter Van Der Linden

news/2024/10/29 22:30:32/

近期看了一本【美】Peter Van Der Linden 写的《C专家编程》,将一些概念总结记录如下:

1. C语言把数组形参当作指针, 如:func(char p[])

2. 数组下标的规则高数我们如何计算左值pea[i][j], 首先找到pea[i]的位置, 然后根据偏移量[j]取得字符。因此,pea[i][j]将被编译器解析为:

*(*(pea+i)+j)

+i 会根据定义pea数组是和类型算,如int pear[i][j], 就会等于pea+i * 4, int占4个字节。

3. 使用指针从函数返回一个数组

int (*paf())[20]{int (*pear)[20];pear = calloc(20, sizeof(int));if(!pear) longjmp(error, 1);return pear;
}

你用下面这样的方法来调用函数:

int (*result)[20];

result = paf();

(*result)[3]=12;

4. NULL指针会导致printf 函数崩溃。

5. 一个函数指针数组可以像下面这样声明:

void (*state[MAX_STATES])();

 如果知道了函数名,就可以像下面这样对数组进行初始化.

extern int a(), b(), c(), d();
int (*state[])()= {a, b, c, d];

可以通过数组中的指针来调用函数:
 

(*state[i])();

甚至可以去掉指针形式,把上面的调用写成:

state[i]()

甚至:

(********state[i])();

这是一个ANSI C中流行的不良方法:调用函数与通过指针调用函数(任意层次的指针间接引用)可以使用同一语法。


http://www.ppmy.cn/news/107893.html

相关文章

前端面试题整理9

1.什么是类数组?Js中类数组如何转化数组? 类数组是具有length属性,但不具备数组方法的对象。 类数组转换为数组:①Array.prototype.slice.call();②Array.from();③扩展运算符(…)…

JavaScript高级三、深入面向对象

零、文章目录 JavaScript高级三、深入面向对象 1、编程思想 (1)面向过程介绍 面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。 (2&…

Revit中如何为曲面墙体开洞口,一键开洞?

一、Revit中如何为曲面墙体开洞口 直线墙体开洞可以直接通过编辑轮廓来绘制洞口形状即可,或者可以通过选中墙体选择“墙-洞口”命令来开洞口。 但是曲面墙体开洞并没有那么简单,曲面墙体不能够编辑轮廓,并且选中曲面墙体“墙-洞口”命令只能够…

JVM-基础知识

JVM基础知识 JVM结构图 字节码文件 Java虚拟机不和包括Java在内的任何语言绑定,它只与字节码文件这种特定的二进制文件格式所关联. Class文件结构不仅仅是JVM的执行入口,更是Java生态圈的基础和核心. 字节码文件内容是什么 字节码是一种二进制的类文件,他的内容是JVM指令,而…

AI语音外呼机器人对于企业的市场有什么促进作用

AI智能语音外呼系统是一种基于人工智能技术的自动外呼系统,实现了电话自动拨打和语音播报等功能,主要应用于商业领域中的市场营销、客服等方面。 AI智能语音外呼机器人主要应用于商业领域中的市场营销、客服等方面。通过采用先进的自然语言处理技术、语…

指导实现的三个变革性成果

领导者最重要的责任是培养领导者。 70-20-10,这是成功培养领导者的黄金法则。我们从研究中了解到,高级领导者是最有效和最强大的工具,可以让有抱负的领导者对自己的发展负责 70%。有抱负的领导者通过承担挑战性任务的责任实现了 70% 的领导力…

两周计划-目录

第一周 第一天至第三天:Java基础知识 复习Java的基本语法、数据类型、运算符等基础知识。复习面向对象的概念、类与对象、继承、多态等内容。复习异常处理、文件操作、输入输出流等。 第四天至第五天:Java集合框架 复习List、Set、Map等常用集合类的…

ModuleNotFoundError: No module named ‘_lzma‘

安装torchvision报错:ModuleNotFoundError: No module named ‘_lzma’ 参考文章:https://zhuanlan.zhihu.com/p/404162713 解决思路:用backports.lzma代替_lzma包 解决步骤:(ubuntu系统) 安装依赖sudo apt-get install liblzma-d…