![](https://img-blog.csdnimg.cn/20190830100648356.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C深入理解
LQJW
这个作者很懒,什么都没留下…
展开
-
C深入理解 结构体里的0长度的数组、指针
单看这文章的标题,你可能会觉得好像没什么意思。你先别下这个结论,相信这篇文章会对你理解C语言有帮助。这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接。微博截图如下。我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章。为了方便你把代码copy过去编译和调试,我把代码列在下面: 1 2 3 4 5...转载 2019-08-30 10:05:03 · 1463 阅读 · 0 评论 -
C深入理解 数组&取地址的问题 a、a+1、&a、&a[0]、&a+1
引先来看一个程序:#include <stdio.h>int main(void){ int a[5]; printf("%p\n", a); printf("%p\n", a+1); printf("%p\n", &a); printf("%p\n", &a+1);}假如a的地址是:0xbfb0070c,那...原创 2019-08-30 21:42:51 · 1414 阅读 · 0 评论 -
C深入理解 如何在C语言中实现C++的Class呢?
有些地方是不适合使用C++语言的。比如C++的虚函数,垃圾回收,异常,在底层开发中使用,反而会造成很多不必要的麻烦。比如C++编译器为了重载函数,其编译出来的函数名会被改成包括参数的形式(换名),而且每个编译器都有自己的内部前缀和后缀,这一点尤其在操作系统编写中会造成麻烦,因为操作系统的系统调用使用汇编,比如中断的实现中,就需要调用汇编中断服务,然后在其中回调操作系统内核的C函数,如果使用C++...原创 2019-09-08 22:50:39 · 10313 阅读 · 2 评论 -
C深入理解 联合体(union)的使用方法及其本质
有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(struct)中所有变量是“共存”的——优...转载 2019-09-10 00:07:02 · 580 阅读 · 0 评论 -
C深入理解 指针与二维数组的关系
下面哪一个表达式不能访问二维数组b的第i行第j列元素?A、b[i][j]B、*(b[i]+j)C、*(*b+i)+jD、(*(b+i))[j]*的使用方法:二维数组a[i][j]的数组名a前加上*,使行地址转换为列地址;例:a+i为第i行行地址,则*(a+i)为第i行第0列的列地址;*(a+i)+j为第i行第j列的列地址;* (*(a+i)+j)中的第一个*是指向...原创 2019-09-15 22:09:01 · 252 阅读 · 0 评论 -
C深入理解 条件编译 (#define、#if 、#ifdef、#elif、#endif)
一、预处理的条件编译预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号“#”开头。二、常用指令# 空指令,无任何效果#define 定义宏#undef 取消已定义的宏#if 如果给定条件为真,则编译下面代码#ifdef 如果宏已经定义,则编译下面代码#ifndef 如果宏没有定义,则编译下面代码...原创 2019-09-19 11:57:42 · 1937 阅读 · 2 评论 -
C深入理解 #、##、__VA_ARGS__和##__VA_ARGS__的作用
一、#用来把参数转换成字符串例子一:#include<stdio.h>#define P(A) printf("%s:%d\n",#A,A);int main(int argc, char **argv){ int a = 1, b = 2; P(a); P(b); P(a+b);}输出为:a:1b:2a+b:3例子二:...转载 2019-09-19 17:09:11 · 531 阅读 · 0 评论 -
C深入理解 数组指针和指针数组的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a; //将该二...转载 2019-09-22 15:08:21 · 169 阅读 · 0 评论