C语言
文章平均质量分 58
lwj103862095
新手交流,能者指教
展开
-
指针的故事一
我们知道 *表示一个指针, ()表示一个函数, [ ]表示一个数组。下面我们来看看各种各样的类型:int board[8][8]; //int数组的数组int **ptrl; //指向int的指针的指针int * risks[10]; //具有10个元素的数组,每个元素是一个指向int的指针int (*原创 2012-08-12 18:46:35 · 857 阅读 · 0 评论 -
判断当前编译器是C++编译还是C编译
使用预处理功能可以判断当前编译器是按照C++来编译还是C编译#include int main(void){#ifdef __cplusplus printf("当前编译器是C++编译\n");#else printf("当前编译器是C编译\n");#endif printf("hello world\n"); return 0;}执行结果:原创 2013-10-10 10:45:57 · 3314 阅读 · 0 评论 -
预处理
#include int main(void){ printf("本文件名:%s\n",__FILE__); //正在编译的文件的名称 printf("当前行号:%d\n",__LINE__); //正在编译的文件的行号 printf("当前日期:%s\n",__DATE__); //正在编译的日期,如“Dec 25 2013” printf("当前时间:%s\n",__TIME__)原创 2013-10-09 21:40:14 · 991 阅读 · 0 评论 -
memcpy和strlen函数的实现
#include #include //malloc()函数typedef unsigned int size_t;size_t my_strlen(const char * str){ const char *sc = NULL; if(str == NULL) return 0; for(sc = str;*sc != '\0';sc++) { /* do n原创 2013-10-09 12:55:18 · 1883 阅读 · 0 评论 -
内存对齐
#include using namespace std;#pragma pack(2)class A{ int i; union U { char buff[13]; int i; }u; void foo() { } typedef char* (*f)(void*); enum{red, green, blue} color;}a;int main原创 2013-10-08 16:18:56 · 1503 阅读 · 0 评论 -
申请内存的问题
初学者容易忘记申请内存的问题,在这里记录一下,以备自己粗心大意造成程序调试的麻烦。/****************************有bug的程序****************************/#include #include #include struct person { int age ; char name;};struc原创 2013-06-29 13:42:29 · 1053 阅读 · 0 评论 -
剖析union---大小端的辨别
《C语言深度解剖》----union关键字一、认识union union(联合体/共用体),顾名思义就是维护足够的空间来放置多个数据成员中的“一种”,而不是为每一个数据成员配置空间,所有的数据成员共有一个空间,同一时间只能存储其中一个数据成员,所有的数据成员具有相同的起始地址。二、大端小端模式2.1 大端模式(Big endian) 字数据的高字节存储在低地址原创 2013-04-26 22:47:59 · 1334 阅读 · 0 评论 -
剖析static关键字
《C语言深度解剖》---static关键字一、static修饰变量1.1 修饰局部变量静态局部变量: 在函数体内部定义,所以只能在函数体内调用,其他地方是绝对访问不了的,而被static修饰的变量总是在内存的静态区,即使这个函数运行结束,这个静态变量的值也不会被销毁,函数在下次被调用时就会用到上一次保留的值。1.2修饰全局变量静态全局变量: 在函数外部定原创 2013-04-26 11:44:30 · 1119 阅读 · 0 评论 -
printf执行顺序
注:原题在《程序员面试宝典》第三版 以下代码的输出结果是什么?#include int main(){ int arr[] = {6,7,8,9,10}; int *ptr = arr; *(ptr++) += 123; printf("%d,%d\n",*ptr,*(++ptr)); return 0;} 答案:8原创 2013-04-12 18:10:07 · 1624 阅读 · 0 评论 -
C语言中如何计算结构体的大小
作者:曾宏安,华清远见嵌入式学院高级讲师。运算符sizeof可以计算出给定类型的大小,对于32位系统来说,sizeof(char) = 1; sizeof(int) = 4。基本数据类型的大小很好计算,我们来看一下如何计算构造数据类型的大小。C语言中的构造数据类型有三种:数组、结构体和共用体。数组是相同类型的元素的集合,只要会计算单个元素的大小,整个数组所占空间等于基础元素大小乘上转载 2013-03-21 17:21:10 · 1176 阅读 · 0 评论 -
枚举变量的大小是多少?
在《C语言深度剖析》这本书中留有一个问题,枚举变量的大小是多少?1、大家猜一下下面这段程序红色部分输出的结果是多少?2、在printf(char *fmt.....)函数里,如需打印枚举变量里的某个域值如何表示枚举变量里面的成员? #include int main(){ enum Color { GREEN = 1,原创 2013-02-24 20:27:16 · 20071 阅读 · 5 评论 -
堆、栈、静态区
Linux 中的进程主要包括3个段,分别为“数据段”、“代码段”、“堆栈段”。 数据段:存放的数据为全局变量、常数以及动态数据分配的数据空间(如malloc 函数分配的空间)等。 代码段:存放的是程序代码数据。 堆栈段:存放的是子程序返回地址、子程序的参数以及程序的局部变量。 在C/C++编译的程序占用的内存分为以下几个部分:(1)、栈(stack)原创 2013-03-05 21:26:01 · 1617 阅读 · 0 评论 -
预处理与const
1.1 宏定义例题1:用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。解析: #defne 语法的基本知识(如:不能以分号结束,括号的使用) 要懂得预处理器将为你计算常数表达式的值,因此,写出你是如何计算一年中有多少秒而不是计算出实际的值,会更有意义。 最重要的是,意识到这个表达式将使一个16位机的整原创 2012-08-23 10:38:04 · 1128 阅读 · 0 评论 -
内存中的数据对齐
假如有二个结构体struct{ short x; short y; short z;}A;struct{ long x; short y;}B;假如执行 sizeof(A); sizeof(B); 那么输出是多少呢?我们来分析一下:原创 2012-08-23 11:14:53 · 1066 阅读 · 0 评论 -
C语言里的typedef简介
typedef工具是一种高级的数据特性,它使得我们能够为某一类型创建我们就想要的名字。在这个方面,它和#define相似,但是它们具有3个不同之处: 1、与#define不同,typedef给出的符号名称仅限于对类型,而不是对值。 2、typedef的解析由编译器,而不是预处理器执行。 3、虽然它的范围有限,但在其受限范围内,typedef比#def原创 2012-08-12 18:41:45 · 1560 阅读 · 0 评论 -
strstr和memcmp函数的实现
#include #include //malloc()函数typedef unsigned int size_t;size_t my_strlen(const char * str){ const char *sc = NULL; if(str == NULL) return 0; for(sc = str;*sc != '\0';sc++) { /* do n原创 2013-10-10 11:10:35 · 4638 阅读 · 0 评论