
C语言
高原@
从事于物联网行业智能硬件开发的程序员
展开
-
C语言面试题
在网上看到这个面试题,一开始很不解,于是记录下来;#includeint main(){ int a[5]={1,2,3,4,5}; int* p=(int*)(&a+1); printf("%d",*(p-1));}答案:输出 5解析:这个问题的关键是理解 &a a是一个数组名,也就是数组的首地址。 对a进行取地址运算符, 得到的是一个指向数组的指针 !!!!这句话尤为重转载 2016-08-28 11:47:47 · 440 阅读 · 0 评论 -
关于全局变量的初始化问题与野指针
今天遇到一个小问题,声明一个全局的指针变量p1,并且通过malloc动态分配内存的方法,将一个1000Byte内存的首地址赋给p1,代码:char* p1=malloc(1000);如下图:但是使用 gcc 命令编译后报出如下错误(使用C99标准)看了别人的博客后才知道是如下原因:c99标准中规定:全局变量和static变量的初始化需要指定一个常量,不能是一个非常量的表原创 2016-12-20 15:45:34 · 5420 阅读 · 0 评论 -
内存分配
内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)转载 2016-11-02 09:28:47 · 320 阅读 · 0 评论 -
字节对齐详解
引言 考虑下面的结构体定义:1 typedef struct{2 char c1;3 short s; 4 char c2; 5 int i;6 }T_FOO; 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始地址是0,则s的地址就是1,c2的地址是3,i的地址是4。 现在,我们编写转载 2016-11-12 11:25:43 · 1103 阅读 · 0 评论 -
关于堆和栈
问题描述编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅有高级语言编程经验,没有看过对此更清晰的解释。我的意思是我理解什么是栈,但是它们到底是什么,在哪儿呢(站在实际的计算机物理内存的角度上看)?在通常情况下由操作系统(OS)和语言的运行时(runtime)控制吗?它们的作用范围是什么?它们的大小由什么决定?哪个更快?答案一转载 2016-10-30 16:44:13 · 312 阅读 · 0 评论 -
一个程序在内存中的分析
博客转载自:http://www.voidcn.com/blog/yusiguyuan/article/p-4628357.html内存管理是操作系统的核心;它对于程序员和系统管理员都很关键。在接下来的几篇文章里面我将对内存的关键技术做谈论,但是不会远离其本质。然而概念很普通,例子多半来自32位X86系统的LINUX和Window操作系统。这第一篇文章谈论程序在内存中如何存放。转载 2016-11-07 19:52:14 · 684 阅读 · 0 评论 -
编译器中一些内置宏(方便调试)
ANSI C标准中几个标准预定义宏:__LINE__:在源代码中插入当前源代码行号;__FILE__:在源文件中插入当前源文件名;__DATE__:在源文件中插入当前的编译日期__TIME__:在源文件中插入当前编译时间;__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;__cplusplus:当编写C++程序时该标原创 2016-10-16 10:44:15 · 1080 阅读 · 0 评论 -
关于字长的问题
评价下面的代码片断:unsigned int zero = 0;unsigned int compzero = 0xFFFF;评价:对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:unsigned int compzero = ~0;解析:~是位运算符,是取反的意思,即二进制位0变1,1变0;unsigned原创 2016-10-16 09:12:59 · 667 阅读 · 0 评论 -
c语言中的条件编译指令
预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。条件编译有三种形式,下面分别介绍:1. 第一种形式:#ifdef 标识符程序段1#else程序段2#endif它的功能是,如果标识符已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格转载 2016-11-06 10:37:17 · 785 阅读 · 0 评论 -
1.求一个整数的二进制中1的个数 2.判断一个数是否是2的n次方
1.请说明下面函数实现的功能:答:func(x)的作用是计算 x 的二进制中1的个数,解析:每执行一次 x=x&(x-1),就会消去x最右边的一个1,直到x为0,于是就计算出了1的个数。2.如何判断一个数是否是2的n次方若x 为2的n次方,将其写成二进制形式后可以发现,二进制中只有一个1,后面跟了若干个0,若将x-1,则1变成了0,后面的0都变成了1,于原创 2016-10-21 15:10:45 · 691 阅读 · 0 评论 -
C语言中,如何通过函数来改变一个变量的值
最近看面试题,遇到一些关于通过函数改变一个变量的值得问题,现在终结一下:先看下面一段代码:#include #include void GetMemory(char *p){ p=(char*)malloc(100);}void Test(void){ char *str=NULL; GetMemory(str); strcpy(str,"he原创 2016-12-21 10:02:21 · 12884 阅读 · 0 评论