C陷阱与缺陷 2
摘要:1,数组对数组只能进行两种操作,1确定数组的大小,2获得数组第一个元素的指针,其他的操作均是通过指针来实现的。123456789#include main(){int a[2][3]={{1,2,3},{4,5,6}};int *p,(*q)[3];p=a[2];q=a;}inta[2][3]={{1,2,3},{4,5,6}};a为一个数组(A),数组的维度为3,元素为数组(B),数组(B)的维...
阅读全文
C陷阱与缺陷 1
摘要:1,符号之间的空白被忽略符号中间不能嵌入空白2,词法分析中的贪心法a---b 和 a-- -b相同和 a- --b不同1a=b/*p //根据贪心法 /*被解释成 注释符,便不再往下读,直到匹配 */1a=b/ *p//*号优先级大于 / 故为b除以 p所指向的值根据编程规范,方便阅读,减少出错的可能1a=b/(*p)3,理解函数的声明4,运算符的优先级5,分号的使用112if()a;12if()...
阅读全文
c 深度剖析 6
摘要:函数的编码风格1.注释2,空行3,缩进4,参数长度,代码长度,语句长度要合适。5,少用全局变量6,指针仅作输入参数时,可用const 设置其为只读属性,避免其在函数中被修改。7,函数默认的输入输出参数为int 类型,无输入参数或输出参数时要注意用void8,入口参数进行断言检验来自为知笔记(Wiz)
阅读全文
c 深度剖析 5
摘要:1,指针没有指向一块合法的区域1指针没有初始化12345678910111213#include #include struct aa{char *pa;char c;}ssa,*ssb;void main(){strcpy(ssa.pa,"abc");printf("%s \n",ssa.pa);}123456789101112131415#include #include #include s...
阅读全文
c 深度剖析 4
摘要:1 预处理1#define1.不能用 #define 定义注释,因为注释先于预处理被处理。2 .宏定义表达式1,注意展开后结合顺序,尽量多加括号2,常量定义时注意是否溢出1#define SEX_YEAR (60*60*24*365)UL3,注意空格2 #pragma#pragma message参数,在编译信息窗口输出信息#pragma code_seg 设置程序中函数代码存放的代码段#prag...
阅读全文
c 深度剖析 3
摘要:1 typedef 和 define 的区别#define是简单的替换;typedef是别名!12#define pchar char *pchar a,b;//展开后 char *a,b;a为指针,b不是12typedef char* pchar;pchar a,b;//a b均为指针2.注释3接续符 和转义字符 均为 \4单引号和双引号5 逻辑运算符&& || 具有短路特性A&&B A为假时 ...
阅读全文
c 深度剖析 2
摘要:1 while 等循环语句1 break 和 continue的去别2 将短的循环写在外面,长的写在里面;3 循环嵌套尽量短2 voidvoid *p,为空指针类型,可以指向任何的类型若函数不接受参数,应写明 void,3 return1234567891011121314#include int *func(void){int a[2]={1,2};return a;}void main(){i...
阅读全文
c 深度剖析 1
摘要:1.registerregister变量必须是能被CPU寄存器所接受的类型(32位机器寄存器为32位),必须是单个的值,长度小于或等于整形的长度不能用&来获取register变量的地址。2staticstatic在代码块外或函数声明用于更改标识符的链接属性static在代码块内的变量定义用于更改存储类型123456789staticintc;//链接属性为internal,存储属性:静态,作用域:...
阅读全文
C专家编程学习 1
摘要:1.C语言的基本数据类型直接与底层硬件相对应。2#define 是可能出现问题12345#define a(y) a_ex(y)a(x)被扩展为 a_ex(x)#define a (y) a_ex(y)a(x)被扩展为 (y) a_ex(y)(x)#define宏的用法1.简单宏定义1#define a y将文件中的 a 全部换成 y为了避免出现问题,要将宏展开,根据运算符的优先级判断是否是需要的...
阅读全文
c 函数及指针学习 10
摘要:标准库函数1算数运算stdlib.h2随机数stdlib.h3字符串转化stdlib.h4数学函数 math.h5日期和时间 time.h6信号 signal.h7打印可变参数列表stdarg.h8断言 assert.h抽象数据类型在数据结构中比较仔细运行时环境没看来自为知笔记(Wiz)
阅读全文
C语言中的三字母词
摘要:C语言中的三字母词(trigraph)在ANSIC标准中,定义了9个三字母词(trigraph),三字母词就是几个字符的序列,合起来表示另一个字符。三字母词使C语言环境可以在缺少一些必需字符的字符集(比如,一些非常老式的键盘上没有[]{}#\^~|)上实现。也许是由于这些字符集我们基本上用不到,所以在大多数C语言的书籍中,我们都看不到对三字母词的讲解。下图列出了9个三字母词以及它们所代表的的字符。...
阅读全文
c 函数及指针学习 9
摘要:指针的高级应用处理命令行参数1234567891011121314151617#include int main(int argc,char **argv){while(*++argv !=NULL && **argv=='-'){switch(*++*argv){case 'a':printf("a select \n");break;case 'b':printf("b select \n")...
阅读全文
c 函数及指针学习 8
摘要:联合体12345678910111213#include union sa{double a;int b;};int main(){union sa ssa;printf("%d \n",sizeof(union sa));}联合体的声明,定义,与结构体一样。联合体的长度为最长成员的长度。联合体的初始化12345678910111213#include union sa{int a;int b;}...
阅读全文
c 函数及指针学习 7
摘要:1。结构的存储分配12printf("%d \n",sizeof(char));printf("%d \n",sizeof(int));int 类型为4B char 为1B1234567struct sa{char a;int b;char c;};12345678struct sa{char c;char b;int a;};struct sa ssa;1printf("%d \n",offse...
阅读全文
c 函数及指针学习 6
摘要:不完整声明1234567891011121314151617181920212223242526/* 方法一 */struct tag_a{struct tag_b *bp; /* 这里struct tag_b 还没有定义,但编译器可以接受 */int value;};struct tag_b{struct tag_a *ap;int value;};typedef struct tag_a A;...
阅读全文
c 函数及指针学习 5
摘要:聚合数据类型能够同时存储超过一个的单独数据。 c语言提供了数组和结构体。1.1234567891011121314#include #include void main(){struct {int a;}x,*b;int c[2]={1,2};x.a=1;b=c;printf("%d \n",b[1]);printf("%d \n",x.a);}12warning C4133: '=' : inc...
阅读全文
c 函数及指针学习 4
摘要:1数组和指针声明的差别声明数组:为数组分配内存,为数组名分配内存(指针常量 4个字节)指针:为指针分配内存(指针变量 4个字节)12345678910#include #include void main(){int a[4];//int *p ;p指向的单元没有初始化printf("%d ",*a);//printf("%d ",*p);}1warning C4700: local variab...
阅读全文
c 函数及指针学习 3
摘要:strlen(x) 返回 size_t 类型,size_t是 unsigned int 类型,所以 strlen(x)-strlen(y) 返回 unsigned int 始终 >=012345678910111213#include #include void main(){char *sa="sdhshdh";char *sb="cdehhhhsdssssd";printf("%d , %d ...
阅读全文
C函数及指针学习2
摘要:1.break 永久终止循环,continue 结束当前循环2。switch每个case标签要有唯一值,(且为常量或常量表达式)不加break 时执行流会贯穿整个case 标签3 赋值操作符char x;int a;a=x=y+3;y+3 的值赋给a, a为char 类型或截断a=x;可能会出现精度损失#include #includevoid main(){int a,b,c;char d;pr...
阅读全文
C函数及指针学习1
摘要:1 大段程序注释的方法#if 0#endif2三字母词以两个问号 开始的都要注意3 字面值(常量)在整型号字面值后加 字符L (long),U(unsigned)说明字符常量 为长整型 或(和)有无符号0开头为 8进制0x开头为 16进制字符常量始终为int类型,不能加后缀字符常量用单引号,包括 单引号包围的单字符,转义字符,三字母词多字节字符常量前面加 L,为宽字符常量宽字节就是用2个字节来表示...
阅读全文