随笔分类 - gcc
c
摘要:为什么声明符的方法如此古怪 问:为什么声明符的语法如此古怪? 答:声明试图进行模拟使用。指针声明符的格式为*p,这种格式和稍后将用于p的间接寻址运算符方式相匹配。数组声明符的格式为a[...],这种格式和数组稍后的取下标方式相匹配。函数声明符的格式为f(...),这种格式和函数调用的语法相匹配。这种
阅读全文
摘要:在机器层面,调用函数之前可能需要预先执行一些指令。调用本身需要跳转到函数的第一条指令,函数本身可能也需要执行一些格外的指令来启动执行。如果函数有参数,参数需要被复制(因为C通过值传递参数)。从函数返回也需要被调用的函数和调用函数执行差不多工作量。调用函数和从函数返回所需的工作量称为“额外开销”,因为
阅读全文
摘要:下面的代码段说明了变量和形式参数声明中怨念或者省略存储类型的所有可能的方法。 int a; extern int b; static int c; void f(int d, register int e) { auto int g; int h; static int i; extern int
阅读全文
摘要:就像一维数组的名字可以用作指针一样,无论数组的维度是多少都可以采用任意数组的名字作为指针。但是,需要特别小心。思考下列数组: int a[NUM_ROWS][NUM_COLS] a不是指向a[0][0]的指针,而是指向a[0]的指针。从C语言的观点来看,这样是有意义的。C语言认为a不是二维数组而是一
阅读全文
摘要:指针处理二维数组的行比较简单,但处理二维数组的列就没那么容易了,因为数组是按行而不是按列存储的。下面的循环对数组a的第i列清零: int a[NUM_ROWS][NUM_COLS], (*p)[NUM_COLS], i; for (p = &a[0]; p < &a[NUM_ROWS]; p++)
阅读全文
摘要:当调用函数并且把指向变量的指针作为参数传入时,通常会假设函数将修改变量(否则,为什么函数需要指针呢?)。例如,如果在程序中看到语句 f(&x); 大概是希望f改变x的值。但是,f仅需检查x的值而不是改变它的值也是可能的。指针可能高效的原因是:如果变量需要大量的存储空间,那么传递变量的值会浪费时间和空
阅读全文
摘要:a++表示a先参与运算,然后再自增; ++a表示a先自增,然后再参与运算。 因此(a++) + 10中的a在此式中仍以原值参与运算,运算结束后再自增 #include <stdio.h> #include <string.h> int main() { int a = 15, b = 33; int
阅读全文
摘要:一、MinGW-w64介绍 MinGW 的全称是:Minimalist GNU on Windows ,实际上是将gcc(c/c++编译器)移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windo
阅读全文