C语言知识
supreme42
学习能力强,技术扎实,有丰富的单板软硬件设计经验,熟悉单板及系统开发测试流程。
展开
-
如何使用Visual studio C++(VC++)编译C?图解,详!!!
如何使用Visual studio C++(VC++)编译C?图解,详!!! 之前在网上找过关于这方面的东西,但是一直都没有看到有详细步骤的,众里寻他千百度,综合各个网友的提示,自己写了个完整的配置步骤。如果还有同学不懂得配置的话,下面就花2、3分钟,跟着我的步骤来。 这里用的是visual studio 2008 express版本。其它版本不知道怎样,我猜想都转载 2012-11-15 11:34:05 · 2761 阅读 · 0 评论 -
有关C语言中有符号/无符号数混合运算的小问题
这两天的工作需要涉及到对无符合数,有符号数作混合运算。作了一些实验,发现自己写了这么多年的程序,以前对于符号数计算相关的理解居然仍存在一些盲点。有符号数与无符号数混合运算可能有三种混合方式1。操作数全为有符号数如:int a = -1;int b = 2;a + b;2。操作数全为无符号数如:unsigned int a = (uns转载 2012-03-28 00:47:02 · 2163 阅读 · 0 评论 -
ASCII码表及说明
ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符0NUL32(space)64@96、1SOH33!65A97a2STX34”66B98b3ETX35#67C99c4转载 2012-03-28 00:45:04 · 1162 阅读 · 0 评论 -
ucosii任务堆栈的作用是什么呢?
第一,当任务运行时,它用来保存一些局部变量;第二,当任务挂起时,它负责保存任务的运行现场,也就是CPU寄存器的值。uCOS任务堆栈的深入分析(转)堆栈作用的就是用来保存局部变量,从本质上讲也就是将CPU寄存器的值保存到RAM中。在uCOS中,每一个任务都有一个独立的任务堆栈。为了深入理解任务堆栈的作用,不妨分析任务从“出生”到“消亡”的整个过程,具体就是分析任务的建立,运行,挂转载 2012-03-27 00:21:10 · 10400 阅读 · 3 评论 -
共用体
有时需要使几种不同类型的变量存放到同一段内存单元中。例如可以一个整形变量,一个字符型变量,一个实型变量放在同一地址开始的内存单元中。以上3个变量在内存单元中占的字节数不同,但是都从同一地址开始存放。也就是使用覆盖技术,几个变量互相覆盖。共用体也是一种构造数据类型,它是将不同类型的变量存放在同一内存区域内。共用体也称为联合(union)。共用体的类型定义、变量定义及引用方式与转载 2012-03-27 00:05:17 · 5922 阅读 · 1 评论 -
大小端、位段和内存对齐
关于C++中的大小端、位段(惑位域)和内存对齐 来源: ♂戚建建㊣的日志 听到好几个朋友说到去一些公司做面试,总是遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。虽然我认为很多开发根本就用不到这个,但是我认为很有必要学习理解这些知识点,因为它可以让你更了解C++的,了解程序在内存的运行情况,也能加深对计算机系统的理解。 声明:由于本文的代码会受到计算机环境的影响,故在此说明本转载 2012-03-27 00:18:14 · 1860 阅读 · 0 评论 -
常见的面试题
Define 1 . 用预处理指令#define 声明一个常数,用以表明1 年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:•; #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)•; 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有转载 2012-02-28 22:50:19 · 858 阅读 · 0 评论 -
每个程序员都应该知道的福利
HR是专门负责谈薪资的, 当我们跟HR讨价还价的时候, HR会介绍公司有的福利,而回避公司没有的福利。 作为程序员,我们一定要对跟我们利益息息相关的各种福利细节了如指掌, 各项福利都要跟HR询问清楚,才能比较公司之间的总体福利。 同时还需要掌握些技巧,别让我们的利益会受到损害。 眼下正是年后跳槽的黄金时期,园里的大牛小牛拿了去年的年终奖后,有些肯定想给自己加点工资。园里的大牛小牛都是我们转载 2012-02-29 00:26:09 · 823 阅读 · 0 评论 -
堆和栈的区别
一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量转载 2012-02-17 00:16:22 · 1485 阅读 · 0 评论 -
浅谈C中的malloc和free
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!转载 2012-03-28 01:01:42 · 835 阅读 · 0 评论 -
C变量默认值
如果是全局变量,所有的全局变量都赋零,字符变量都赋NULL即0.指针变量也是NULL。即全部变量都自动初始化了。如果是局部变量,所有的变量都不初始化,因此为随机数。如果不赋值就使用,很危险。需要先初始化再使用。原创 2012-03-28 00:54:02 · 3110 阅读 · 0 评论 -
MIPS DMIPS MFLOPS名词解释
MIPS: Million Instructionsexecuted Per Second,每秒百万条指令,用来计算同一秒内系统的处理能力DMIPS:Dhrystone Million Instructionsexecuted Per Second :主要用于测整数计算能力。MFLOPS:主要用于测浮点计算能力。 MIPS,DMIPS和MFLOPS是常用的CPU性能评估标准,原创 2012-06-07 00:49:19 · 3229 阅读 · 0 评论 -
C语言函数不能返回局部变量的地址
在C中,正常情况下,我们只能从函数中返回一个值。但在很多情况下,我们需要从函数中返回多个值,此时使用数组或指针能够很好地完成这样的任务。这里是一个示例。这个程序使用一个整型数组作为参数,并将数组元素的和与积返回给调用函数。下面是C代码,这是一种常见情况。下面给出实现技巧:#include stdio.h> #include conio.h> int* Pool(int arra转载 2012-06-05 23:22:43 · 7975 阅读 · 1 评论 -
如何编写有多个返回值的C语言函数
1引言 笔者从事C语言教学多年,在教学中学生们常常会问到如何编写具有多个返回值的C语言函数。编写有多个返回值的函数是所有C语言教材里均没有提到的知识点,但在实际教学与应用的过程中我们都有可能会遇到这样的问题。有学生也尝试了不少方法:如把多个需要返回的值作相应的处理后变成一个可以用return语句返回的数据,再在主调函数中拆开返回的数据使之变成几个值;或者把需要返回多个值的一个函数转载 2012-06-06 00:17:40 · 65100 阅读 · 9 评论 -
指针的初始化
指针和其他类型变量不同的是它有“两种”地址。由于指针仍然是变量,所以系统会分配一块内存,这块内存有一个地址,记住这个地址是系统分配的,不会出错。当然如果将这个地址存放在另一块内存中,那么就是双重指针了。另外,指针的特殊之处在,指针变量也是表示的地址,我们可以通过这个地址来访问其他变量,叫做间接访问。指针的初始化,就是讨论指针变量“这块内存”的赋初值问题。第一个问题,为什么要进行初始化转载 2012-06-01 00:37:09 · 1027 阅读 · 0 评论 -
转义字符的完整诠释
转义字符是C语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号( '),用于表示字符串常量的双撇号( ")和反斜杠( \)等。转义字符用反斜杠\后面跟一个字符或一个八进制或十六进制数表示。转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) 008 \f转载 2012-03-29 00:31:49 · 779 阅读 · 0 评论 -
字符串赋值问题
字符串的赋值,本质上并不是对变量赋值了整个字符串,而是将字符串的首地址给了变量,因此呢要想对字符串赋值有3种方法, 方法一:首先要有一个指向字符的指针用来存放这个字符串的首地址。例如 char *p;下面就可以对p进行赋值了,p="bbbbbbbb";方法二:使用字符数组,char a[10];这种方法和上面的类似,不过有一点注意,数组名虽然代表的也是个地址,但是是个常量地址,原创 2012-03-29 00:17:11 · 1528 阅读 · 0 评论 -
彻底搞定C指针-——第五篇:函数参数的传递
一. 三道考题开讲之前,我先请你做三道题目。(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?)1. 考题一:程序代码如下:void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf(“x=%d,y=%d\n”,x,y)}void main(){ int a=4转载 2012-03-28 23:54:52 · 968 阅读 · 0 评论 -
volatile的作用
283推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量转载 2012-02-28 23:17:41 · 558 阅读 · 0 评论 -
C语言非常重要的细节(知道一点更新一点)
1.定义一个指针变量P ,那么变量p在内存分配多少字节呢?答:指针变量分配的空间为CPU的字长,就是CPU的地址线根数n(也就是CPU最大的寻址空间为2的n次方),即不同的CPU(也就是不同的编译系统)分配到不一样的空间。比如32位机分配到的就是4byte的空间。 2.嵌入式系统中8位数(或者其他位数)给一个bit变量赋值位运算一般在单片机编程中用的较多,在C51里面先定义一个原创 2011-08-15 15:58:17 · 1267 阅读 · 0 评论 -
C语言中无符号数和有符号数相加问题
看个题:#include int main() { unsigned int a=6; int b=-20; printf("%d\n",a+b); (a+b)>6? puts(">6"):puts("return 0; } 结果是:-14 >6意想不到吧?为什么结果这样呢?原来有符号数和无符号数进行比较运算时(==,,=),有符号数隐式转原创 2011-08-15 15:25:52 · 17720 阅读 · 1 评论 -
cpu和内存之间——地址映射
cpu和内存之间有三根总线,地址,数据,和控制总线。这是在说地址之间的问题。cpu和内存之间用地址来查找数据,但是两者的地址并不总是一样的,cpu产生的是逻辑地址,而内存的就是物理地址。通常都是不一样的,所以需要地址映射。正好是从编程人员的角度看,(不考虑解释执行)程序总是经过源程序编译,连接,运行三个阶段。在这个过程中,指令和数据就要调到内存。地址捆绑的三种形式:编译时:编译时就转载 2011-11-29 00:10:56 · 5207 阅读 · 0 评论 -
结构体中的自然对界法则
在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可 以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员 按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。例如,下面的结构各成员空间分配情况: struct转载 2011-08-15 17:13:20 · 1965 阅读 · 0 评论 -
c语言中static变量
c语言中static变量 2009-06-30 20:33:24| 分类:默认分类| 标签:|字号大中小 订阅static静态变量声明符。 在声明它的程序块,子程序块或函数内部有效,值保持,在整个程序期间分配存储器空间,编译器默认值0。是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。2、为什么要引入static?函数内部定义的变量,在程序转载 2011-08-13 23:39:52 · 907 阅读 · 0 评论 -
如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习)
如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习)_转 来源:www.armjishu.com作者:jesse转载请注明出处首先,如果你有幸看到这篇文章,千万不要试图在2个小时内阅读完,就算你2个小时阅读完,我相信你也不会理解里面讲解的精华之处,我相信,你应该将此文章,慢慢品尝,这绝对是一篇需要品尝2~3天,再结合自己过往的经验,加上自己的思考,我相信会对转载 2011-08-05 16:44:24 · 1280 阅读 · 0 评论 -
C语言中extern的用法
第一篇一,static和extern: 大工程下我们会碰到很多源文件。文件a.cstatic int i; //只在a文件中用int j; //在工程里用static void init() //只在a文件中用{}void callme() //在工程中用{ static int s转载 2011-11-25 22:58:46 · 909 阅读 · 0 评论 -
函数指针
函数指针函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数转载 2011-12-16 21:52:54 · 540 阅读 · 0 评论 -
深入分析存储器的位宽及与C的关系
一、硬件参数1、CPU:s3c44b0x字长32位;以字节为单位编址;数据处理支持三种数据类型:字节(8位)、半字(16位)、字(32位);存储方式有大小端之分;25根地址线。 2、存储器Ⅰ Flash ROM: SST39VF1601数据位宽为16位(16根数据线);20根地址线;2M(1M*16bit)。 Ⅱ SDRAM: HY57V64162转载 2011-08-14 12:21:40 · 6222 阅读 · 0 评论 -
C语言中 *.c和*.h文件的区别!
C语言中 *.c和*.h文件的区别! 这是HR面试我的一道题,没技术上含量,不过细想起来,还是C语言的最基本的知识!俗话说,目标决定动力,细节决定成败! C文件就是C语言系列的源文件,而H文件则是C语言的头文件,即C系列中存放函数和全局变量的文件,因为C中的函数是被封装起来的,即无法看到其代码。 子程序不要定义在*.h中。函数定义转载 2011-08-14 00:21:12 · 1492 阅读 · 0 评论 -
FLASH ERASE:CHIP、BLOCK、SECTOR
FLASH ERASE:CHIP、BLOCK、SECTOR SPI FLASH 的ERASE、READ、WRITE,笔者都用ESL在博文中论述过。ERASE包括CHIP、BLOCK、SECTOR三方面的内容;READ可对指定地址的单个及连续读取数据;WRITE也有单个及连续写入数据。相关内容可翻阅之前的博文,笔者要强调一下的是现阶段再次接触到的ERASE的内容,随时随转载 2012-01-14 00:27:00 · 10021 阅读 · 0 评论 -
深入理解C语言——#define宏和枚举的区别
(1)从处理过程的角度看:#define宏是由编译预处理器在预编译处理时处理的,而且只做简单的字符串的替换。枚举常量则是在编译的时候确定其值的。(2)从调试的角度看:通常情况下,在编译器里,可以调试枚举常量,而不能调试宏常量。(3)从数据的类型看:#define可以编译任意类型的常量,而枚举只能是定义整型常量。(4)从代码编写角度看:枚举可以一次定义大量常量,而#def原创 2012-02-27 23:56:16 · 5784 阅读 · 1 评论 -
typedef用法
一.基本概念剖析 int* (*a[5])(int, char*); //#1void (*b[10]) (void (*)()); //#2double(*)() (*pa)[9]; //#3 1.C语言中函数声明和数组声明。函数声明一般是这样: int fun(int, double);对应函数指针(pointer to转载 2012-02-27 23:05:41 · 641 阅读 · 0 评论 -
深入理解c语言——‘\0’ ,‘0’, “0” ,0之间的区别
看来基础还是很重要的,基础不扎实就难以学好c语言,就别说写出高质量的c语言代码了。今天,我就被这个问题折磨的不行了,哈哈,不过现在终于明白了‘\0’ ,‘0’, “0” 之间的区别了。困惑和快乐与你分享! 首先比较一下‘\0’和‘0’的区别。有一个共同点就是它们都是字符,在c语言中,字符是按其所对应的ASCII码来存储的,一个字符占一个字节。请翻开你的ASCII字符集表吧,一般在你的C语言转载 2012-02-27 23:59:30 · 188612 阅读 · 8 评论 -
extern用法
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗? 答案转载 2012-02-27 22:49:17 · 501 阅读 · 0 评论 -
深入理解指针函数
1.指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 *函数名(函数参数表列); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。转载 2011-08-14 16:31:37 · 802 阅读 · 0 评论 -
关于C语言static定义函数类型的具体解释
内部函数和外部函数 函数一旦定义后就可被其它函数调用。 但当一个源程序由多个源文件组成时, 在一个源文件中定义的函数能否被其它源文件中的函数调用呢?为此,C语言又把函数分为两类:一、内部函数 如果在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其它文件中的函数调用, 这种函数称为内部函 数。定义内部函数的一般形式是: stat转载 2011-08-17 11:34:05 · 3958 阅读 · 0 评论 -
C语言头文件的使用
C语言头文件的使用 C语言头文件的使用 ——by janders 转载请注名作者和出处,谢谢! C语言中的.h文件和我认识由来已久,其使用方法虽不十分复杂,但我却是经过了几个月的“不懂”时期,几年的“一知半解”时期才逐渐认识清楚他的本来面目。揪其原因,我的驽钝和好学而不求甚解固然是原因之一,但另外还有其他原因。原因一:对转载 2011-08-04 17:08:15 · 648 阅读 · 0 评论