`
saybody
  • 浏览: 904116 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

C++/C语言探底巩固

阅读更多

函数前使用extern没有意义;extern用在变量前表示变量是一个外部链接符号。(函数天然是一个外部链接符号)

——与此相关的,指定函数的调用风格(__cdecl, __stdcall, __fastcall)等,或者生成动态连接库时(__declspec(dllimport)、__declspec(dllexport)),或者指定编译语言类型时(C, C++)时,都只需要在 声明体(.h文件) 中说明,不需要在实现体(.c文件)中说明。

同时,static对于函数和变量的意义也不同。

对于C而言,源文件内、函数体外的static视为“文件域”可见,而C++中没有这样的说法,类、函数体外可见,即全局可见!

static用在函数内部,表示这个变量对于函数的每次调用持久存在;

static用在类成员上,表示这个变量总是采用类名::变量名形式访问,对于类的每个实例总是可见,相当于有限可见的全局变量,类似C语言的文件域。

const用在形参上,表示函数对它不做写操作;

const用在成员函数后,表示函数不对成员变量做写操作;

const用在成员变量上,表示变量不允许任何函数对它做写操作,因此必须在函数体外初始化:

构造器初始化期间——普通变量,RAM区,实例的stack内;

或者类的静态区初始化期间——静态const变量,RAM区,全局,但是需要加类名域访问;

或者编译建立符号表期间——整型静态const变量,ROM区

区别于宏定义——编译后即变为多个立即数,没有存储空间,而是蕴藏在.text指令中。

数组的特殊性:??

非可移植的内存分配技巧:(要求平台的malloc库实现时采用连续分配,用途:概要访问,隐式存储)

struct name {

int namelen;

char namestr[1];

};

#include <stdlib.h>

#include <string.h>

struct name *makename( char *newname )

{

struct name *ret = malloc(sizeof(struct name)-1 + strlen(newname) + 1);

if (ret != NULL) {

ret->namelen = strlen(newname);

strcpy(ret->namestr, newname);

}

return ret;

}

C99引入了许多C++中已有的特性:结构体越来越像 类 了——可以创建无名的临时 结构体变量

结构体的sizeof值是内存占用范围,“空洞”也计算在内

如何计算field在struct中的字节偏移量?

非可移植方案:#define offsetof(struct, f) (size_t) ( (char*) (struct*)0->f - (char*) (struct*)0 )

不要使用内建的==或!= 来比较结构体变量——编译器对齐操作可能会导致结构体的稀疏,出现空洞

结构体中的位域如何使用?

struct {

BYTE :4; //最低4位不用(Intel little-endian,即最前面的字节)

BYTE a:4; //注意,每个位域都不能跨越8bit边界

BYTE b:2;

}x;//其中类型为BYTE即可

在需要指针型的地方,如何传入一个常量?

如intf(int *)函数,怎样传入一个常量? ——在C99中,可以使用“复合字面量”:f( (int[]){5} ); 类似Java??

函数名本质上也是一个地址,类似数组名; 函数指针本质上也是一个可以参与 赋值、算术 的变量。 () 是唯一可以用于函数指针的后缀运算符。

不同的是,函数名、函数指针的地址实际上是代码区或者说ROM的地址,而数据变量名、数据指针的地址实际上是数据区RAM的地址,二者不能通用。例如,空的函数指针为void (*)(),空的数据变量指针为void *;

NULL没有想象中的省力——在函数参数传入时,仍然需要使用类型转换。

一般来说,NULL仅仅是一个提示:这里是一个指针0,没有其他意义。所以,在不需要指针的地方(如ASCII空字符:'\0')不要用它。

使用规则:

1、在需要空指针常量时,用0或NULL都是等价的;

2、在函数调用传入0时,根据原型在0或NULL前添加强制转换;

为什么需要NULL?因为NULL(表示空指针)在某些平台上实现为0,而在另一些平台上用特殊值来实现——为什么C标准不把它统一定义为0?因为在某些平台上用特殊值来触发自动的硬件陷阱,可以捕捉到空指针非法访问的错误,统一用0实现空指针是一种不幸的倒退。

数组并非C语言一级元素,下标也并非一级运算符,而是定义在指针算术运算基础上——因此,a[i] 等价于 *( (a) + (i) ),也等价于 i[a]。

通过定义不同类型(主要是维数)的指针p,关联数组a后,可以对p实现++或--不同粒度的重载。

一本C语言的习题汇编:

C Programming FAQs, Steve Summit, 人民邮电2008

分享到:
评论

相关推荐

    c++/C语言 后端学习 基础学习

    本资源包主要针对C++/C语言的基础学习,提供两本经典教材的中文版,即《C++ Primer Plus》第六版和《C Primer Plus》第六版,帮助初学者系统地掌握这两门语言。 《C++ Primer Plus》第六版是C++入门的经典之作,由...

    《高质量程序设计指南.C++/C语言(第四版)》扫描版[PDF]1

    本书共17章,第1章到第4章重点介绍软件质量和基本的程序设计方法;第5章到第16章重点阐述c++/c编程风格、面向对象程序设计方法和一些技术专题;第17章阐述stl的原理和使用方法。

    高质量程序设计指南C++/C语言

    在编程领域,C++和C语言是两种非常基础且重要的编程语言。...通过深入学习并实践这本《高质量程序设计指南C++/C语言》,开发者可以掌握这两种语言的精髓,写出更高质量的代码,为职业生涯打下坚实的基础。

    Microsoft Visual Studio C++/C语言编译器

    适用于C++/C语言初学者相关代码的开发,本软件无需安装,下载解压后,只需在Microsoft Visual Studio\Common\MSDev98\Bin目录下找到MSDEV.EXE运行文件,双击运行即可。

    C++/C语言入门集成开发环境Dev-C++免费无需积分下载

    Dev-C++是一款面向初学者和专业开发者,支持C++和...总之,Dev-C++是一款非常适合初学者入门的C++/C语言IDE,它的易用性和免费性使得编程学习变得更加便捷。熟练掌握Dev-C++的使用,将为你的编程之路打下坚实的基础。

    C++/C语言的编译器TC3

    TC3是C++/C语言的编译器 1、TurboC++3.0不仅能设计和编译C程序文件,而且修正了TurboC2.0中存在的一些Bug(如:不能正常使用float数组等问题); 2、TurboC++3.0还支持多窗口操作,窗口间可以快速切换; 3、完全支持...

    高质量程序设计指南 c++/c语言(第三版)

    《高质量程序设计指南 C++/C 语言(第三版)》是一本专为提升C++和C语言编程技能而编写的指南,旨在帮助开发者更好地理解这两种语言的核心概念,提升程序设计的质量和效率。本书深入探讨了C++和C语言的关键特性,...

    (免费下载)Dev-C++ 6.5 安装包 - C++/C语言/编辑器

    Dev-C++(别名 Dev-Cpp)是 Windows 环境下的一个轻量级 C / C++ 集成开发环境(IDE)。它是自由软件,遵守 GPL 许可协议分发源代码。集合了功能强大的源码编辑器、MingW64 / TDM-GCC 编译器、GDB 调试器和 AStyle ...

    《高质量程序设计指南》——C++_C语言

    电子书 高质量程序设计指南——C++_C语言(第二版)

    基于Python/C++/C语言的五子棋人工智能算法与神经网络评估设计源码

    该项目是一款集Python、C++和C语言于一体的五子棋人工智能算法与神经网络评估设计源码,共计101个文件,涵盖24个JPG图像文件、24个PNG图像文件、16个Python脚本文件、9个文本文件、9个Jupyter Notebook文件、5个C++...

    基于C++/C语言的平衡功能训练系统软件设计源码

    该项目是一款基于C++和C语言的平衡功能训练系统软件设计源码,共包含34个文件,包括11个C++源文件、10个头文件、9个用户界面文件、1个许可证文件、1个Markdown文件、1个项目文件和1个资源文件。该系统旨在提供高效、...

    高质量程序设计指南 c++_c语言.rar

    总之,《高质量程序设计指南 C++_C语言》是程序员必备的参考资料,无论你是刚刚接触这两种语言,还是希望巩固已有技能,都能从中受益。通过学习,你可以提升代码质量,理解编程最佳实践,从而成为一名更优秀的软件...

    高质量程序设计指南_C++_C语言(第三版) PDF

    《高质量程序设计指南》是针对C++和C语言的一本经典教程,特别是在其第三版中,作者深入浅出地探讨了这两个编程语言的核心概念和技术。这本书对于初学者和经验丰富的程序员来说都是一份宝贵的资源,它不仅讲解了基础...

    C++/C语言通用开算数平方函数,性能卓越

    提供了两个函数: sqrt牛顿迭代法求算术平方根 q_sqrt快速求算数平方根(速度快,精度低)

    高质量程序设计指南-C++.C语言.3rd .zip

    高质量程序设计指南-C++.C语言.3rd 解压密码:1234567890

    我的C++/C语言心得,很好的

    别下,下了你们会后悔的,只能自己看看看看,别下,下了你们会后悔的,只能自己看看看看

    高质量程序设计指南 C++_C语言.pdf

    高质量程序设计指南 C++_C语言.pdf

    高质量程序设计指南C++C语言(第3版)

    《高质量程序设计指南C++C语言(第3版)》这本书主要面向的是C++和C语言的程序员,特别是那些希望提升代码质量、编写高效稳定程序的开发者。书中不仅涵盖了C++和C语言的基础知识和高级特性,还着重介绍了如何编写高...

    GomokuGame(“四子棋”或“五子棋”两种模式).rar

    最终的exe游戏可以选择五子棋或四子棋两种模式,五子棋/四子棋/C语言/C++/MFC。 最终的exe游戏可以选择五子棋或四子棋两种模式,五子棋/四子棋/C语言/C++/MFC。 最终的exe游戏可以选择五子棋或四子棋两种模式,...

Global site tag (gtag.js) - Google Analytics