C陷阱&缺陷
1.1= 与 ==
例1:
本例中循环语句的本意是跳过文件中的空格符、制表符、换行符
while(c=''||c=='\t'||c=='\n')
c=getc(f);
c= ''||c=='\t'||c=='\n'
死循环
例2:
if((filedesc==open(argv[i],0))<0)
error();
永远不会被调用
1.2 & 和 | 不同于&& 和||
1.3 C语言运算符
a---b <==> a-- -b
a - --b
y=x/*p 表示注释 -》y=x/(*p)
1.4 整型常量
1.5 字符和字符串
注:用单引号括起来的一个字符代表一个整数
用双引号括起来的一个字符代表一个指针
2.1 函数
float *g() , (*h)();
*g() 《==》*(g()) g是一个函数 该函数的返回值类型为指向浮点数的指针。
h是一个函数指针 ,h所指向的函数的返回值为浮点类型
3.1 指针 数组
struct
{
int p[4];
double x;
}b[17];
声明了b是一个拥有17个元素数组,其中每个元素都是一个结构体
*a 就是数组a中下标为0的元素引用。
*a=84;
清空数组
int month;
for(month=0;month<12;month++)
{
int day;
for(day=0;day<31;day++)
{
calendar[month][day]=0;
}
}
3.1 非数组的指针
库函数strlen返回参数中字符串所包括的字符数目,
而作为结束标志的空字符并未在计算在内,因此,strlen(s)
的值是n,那么字符串的实际需要n+1个字符空间。
char *r,*malloc();
r=malloc(strlen(s)+strlen(t)+1);
if(!r)
{
complain();
exit(1);
}
strcpy(r,s);
strcat(r,t);
/* 一段时间以后*/
free(r);
3.3 作为参数的数组声明
函数的声明:
int strlen(char s[])
{
/*具体声明*/
}
《==》
int strlen(char *s)
{
/*具体声明*/
}
main(int argc,char *argv[])
{
/*具体内容*/
}
《==》
main(int argc,char **argv)
{
/*具体内容*/
}
&nbs
相关文档:
今天无事,在论坛上一直看贴子,很少动手实践,今天试着写了一个读取源程序代码行数的例子:
现在的代码如下,可能还有不完善的地方,以后再改进:
#include <stdio.h>
#define CHARCOUNT 255
#define CON 6 /*单行注释最少的时候*/
int realLength = 0;
/*
* function name: strCount
* function : count ......
#include <iostream>
#include <io.h>
#include <sys\stat.h>
#include <afx.h>
#define _AFXDLL
using namespace std;
void main()
{
// 此文件在工程打开状态下为不可访问
char* f ......
C函数要在程序中用到以下这些宏:
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
va_list:用来保存宏va_start、va_arg和va_end所需信息的一种类型。为了访问变长参数列表中的参数,必须声明
& ......
刚刚看过这篇《30 years of C》,回想了这几年的学习历程。
在大学里,我学习的第一门程序设计语言是C,但花时间最多的还是C++。大约五年前,开始啃《 C++编程思想》两卷本,用Dev-cpp在机器练习着书上的一个个例子程序,之后又学习了面向对象编程、STL、模板。凭着 ......
C程序是由一组或是变量或是函数的外部对象组成的。 函数是一个自我包含的完成一定相关功能的执行代码段。下面小编和大家分享下C语言中的函数。
1. registerbgidriver函数
registerbgidriver函数的功能是登录已连接进来的图形驱动程序代码,其用法为:int registerbgidriver(void(*driver)(void ......