
C
Warren_Hoo
个人博客已迁往http://coredumper.cn/
展开
-
C常见问题之函数指针
考虑如下代码:#include void show(void){ printf("hello\n"); return;}int main(void){ void (*p)(void) = show; (*p)(); p(); return 0;}执行结果如下:hellohello上述代码需要注意一下几原创 2013-10-15 11:14:26 · 883 阅读 · 0 评论 -
C常见问题之结构的声明和结构变量的定义方式
不使用typedef的情况:有如下两种定义结构变量x的方式:struct str{ int a; double b;};struct str x;struct str{ int a; double b;}x;使用typedef的情况:有如下两种定义结构变量x的方式:typedef struct str{原创 2013-10-15 10:40:00 · 1060 阅读 · 0 评论 -
C常见问题之字符串的数组形式与指针形式的区别
由双引号括起来的字符串常量属于静态存储类型,它被存储在内存的静态存储区内,所以无论字符串常量出现在程序的什么地方,它在程序的整个运行过程中只存储一份。如果用字符串常量初始化字符数组,就是从静态存储区把整个字符串复制给数组。例如:char a[] = "hello";如果用字符串常量初始化字符指针,就是把字符串在静态存储区的地址复制给指针。例如:char *p = "wo原创 2013-10-13 16:26:23 · 1374 阅读 · 0 评论 -
C常见问题之字符串数组和字符指针数组问题
通过如下的实例来讲解这个问题:#include int main(void){ char a[3][4] = {"123", "abc", "edf"}; char *p[3]; char **pp; int i; for(i = 0; i < 3; ++i){ p[i] = a[i]; } pp = p;原创 2013-10-13 16:25:15 · 1462 阅读 · 0 评论 -
C常见问题之对结构变量的整体赋值问题
对一个结构可以在初始化时进行整体赋值,例如:struct node{int i;int j;};struct node a = {1, 2}; 但是对一个已经定义好的结构变量,不可以采用整体赋值的方式,只能对结构中的每个成员分别进行赋值,下面的两个例子便是错误的:struct node b;b = {1, 2}; struct node *p = (st原创 2013-04-05 15:35:10 · 5980 阅读 · 1 评论 -
C常见问题之自动类型转换
如果两个操作数具有不同的类型,而且这两种类型的位宽度不同,则会将其中位宽度较小的操作数类型转换为另外一种数据类型。 如果这两种类型的位宽度相同,而其中一个是signed类型,另一个是unsigned类型,则会将signed类型转换为unsigned类型。把一个有符号数转换成无符号数时,其底层的二进制表示没有改变,仅仅是对其进行了不同的解释。当把一个有符号数转换成无符号数时,其底层的二进制表原创 2013-03-22 16:56:49 · 1058 阅读 · 0 评论 -
C常见问题之RAND_MAX到底是多少
用rand()生成的随机数位于0到RAND_MAX之间。RAND_MAX是stdlib.h中宏定义的一个字符常量,其值最小为32767,最大为2147483647,其值与具体的库函数有关,可以用下面的代码测试一下。#include#includeusing std::cout;using std::endl;void main(){ cout }原创 2012-11-10 18:06:03 · 8945 阅读 · 0 评论 -
C常见问题之头文件引用
include 包含头文件的语句中,双引号和尖括号的区别:1.双引号:引用非标准库的头文件,编译器首先在程序源文件所在目录查找,如果未找到,则去系统默认目录查找,通常用于包含用户自定义的头文件。2.尖扩号:只在系统默认目录(由用户在设置环境时设置的)或者括号内的路径查找,通常用于包含系统中自带的头文件。综上,标准库自带的头文件既可以用双引号也可以用尖括号,用户自定义的头文件只能用尖原创 2012-08-28 16:17:31 · 2134 阅读 · 0 评论 -
C常见问题之fopen的读写模式参数
首先看一段文件操作的源码,其功能是将数字0.054321写入文件test.txt中,每行一个,共10行,然后从该文件中读取写入的数字,并计算其和。 #include void main(){ double sum=0; double a; double j = 0.054321; FILE *fp; fp = fopen(原创 2012-08-28 16:02:30 · 1778 阅读 · 0 评论 -
C常见问题之如何构建一个完整的C项目
一个完整的C项目通常包括如下几类文件:c文件:常包含函数定义、全局变量定义。h文件,即头文件:通常包含#define指令、结构声明、typedef语句、函数原型、全局变量的extern声明。makefile文件注意事项:1.将具有特定功能的相关函数放在同一个c文件中,将main函数放在单独的c文件中。2.让相关联的c文件与h文件具有相同的文件名,相关联是指同一个原创 2013-10-16 20:46:30 · 1606 阅读 · 0 评论 -
C常见问题之exit
exit()用于中止整个程序的执行,并返回一个整数值,通常0表示正常终止,非0表示异常终止,这个值将会返回给操作系统。调用exit()前需要包含头文件stdlib.h,该头文件还宏定义了两个整数值:EXIT_SUCCESS和EXIT_FAILURE,可以用作exit()的返回值。注意exit()与return是不同的,return用于从当前函数返回到调用函数,但不会终止程序。原创 2013-10-17 10:05:01 · 966 阅读 · 0 评论 -
C语言小贴士之指针
虽然空指针NULL和空字符'\0'在数值上都可以用0表示,但是二者的概念不同,空指针是一个指针,而空字符是char类型的常量。另外使用NULL前需要先包含头文件stdio.h。对指针加一个整数等价于对指针的值加上它所指向的对象的字节大小与这个整数的乘积,这同样适用于对指针减一个整数。只有指向同一个数组的两个指针才能相减,得到的结果是两个指针所指向对象之间相距的元素个数,原创 2014-03-02 20:42:46 · 1121 阅读 · 0 评论 -
C语言小贴士之数据类型和变量定义
不带限定符signed或者unsigned的char类型对象是否带符号,取决于具体实现。字符的字典顺序其实就是字符在ASCII表中的ASCII值顺序。char类型实际存储的是字符所对应的ASCII编码整数值,而不是字符本身,考虑如下实例:#include int main(void){ char ch = 'a'; p原创 2014-03-02 20:40:10 · 1158 阅读 · 0 评论 -
C语言小贴士之switch分支语句
switch分支语句的结构如下:switch(var){ case c1: break; case c2: break; default: break;}其中var必须是整型变量,c1和c2必须是整型常量或者整数常量表达式。另外需要注意的是,无论defaul原创 2014-03-02 20:39:43 · 1194 阅读 · 0 评论 -
C语言小贴士之数组
对数组初始化时,{}中的数值个数可以小于数组的元素个数,这样没有得到初始值的元素将被默认初始化为0。对数组赋值只能采用逐个元素赋值的方式,而不能像初始化那样用{}进行整体赋值。数组名是数组首元素的地址,它是个常量,不可以被修改。定义数组时在方括号内只能使用常数,例如用#define宏定义的是常数,它的值是在编译时确定的。需要注意的是const类型的的变量并不原创 2014-03-02 20:39:26 · 1049 阅读 · 0 评论 -
C常见问题之类函数宏的定义方法
下面是一个类函数宏的定义,它的功能是对函数返回值进行错误检查。#define CHECK_ERROR(x) do{\ if( (x) != 0){\ fprintf(stderr, "Error %d occurs at file %s line %d\n", (x), __FILE__, __LINE__);\ exit(-1);\ }}whi原创 2014-02-25 16:19:03 · 1728 阅读 · 0 评论 -
C语言小贴士之运算符
定义main()函数时,函数返回类型必须是int,不可以是void,在函数体的结尾需要有语句return 0;。这是因为main()函数执行结束后将会返回到操作系统,操作系统需要根据接收到的返回值来判断程序的执行状态,0代表正常,其他值根据操作系统的定义而代表各种异常状态。在ANSI C中,如果函数没有形参,则需要使用void进行显示声明。当然直接使用空参数表()也没有问题,这原创 2013-10-19 21:21:55 · 951 阅读 · 0 评论 -
C语言小贴士之函数
定义main()函数时,函数返回类型必须是int,不可以是void,在函数体的结尾需要有语句return 0;。这是因为main()函数执行结束后将会返回到操作系统,操作系统需要根据接收到的返回值来判断程序的执行状态,0代表正常,其他值根据操作系统的定义而代表各种异常状态。 即使函数的返回类型是void,最好也要在函数体的结尾加上语句return;,这样在较大的函数中有助于看清函数原创 2013-10-19 21:17:42 · 862 阅读 · 0 评论 -
C常见问题之常用I/O函数
I/O函数可以分为两大类,一类是针对文件的,一类是针对标准输入(stdin)和标准输出(stdout)的。针对文件的I/O函数1.getc()和putc()getc()的函数原型:int getc(FILE *stream);函数功能:从参数stream指定的文件中读取一个字符,并把它作为一个int型变量作为函数的返回值。当读取到文件结尾时的返回值:EOFputc(原创 2013-10-19 20:42:08 · 929 阅读 · 0 评论 -
C常见问题之用枚举类型模拟bool类型
ANSI C中是没有bool类型的,C99中引入了bool类型,具有true(也就是1)和false(也就是0)两种值,但是需要包含头文件stdbool.h之后才可以使用。我们完全可以用枚举类型来模拟bool类型,如下所示:typedef enum{ false, true}bool;bool test(int a){ if(a > 0){ re原创 2013-10-17 15:57:51 · 3837 阅读 · 0 评论 -
C常见问题之static
c语言中static的语义1.static变量:1).局部static变量a.内存中的位置:静态局部变量存放在静态存储区(静态存储区在整个程序运行期间都存在)。而自动变量存放在栈中。b.生存期:整个源程序的运行时间。c.作用域:与自动变量相同,只能在定义该变量的函数内使用。但是在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到整个程序结束,只不过我们不能再对它进行访问原创 2012-04-10 15:49:46 · 543 阅读 · 0 评论