概述
C是一种强大、简洁的编程语言。之所以流行是因为它提供了有用的编程工具和对硬件良好的控制,还因为C程序在一个系统到另一个系统的移植方面比大多出程序更容易。
C是一种需要编译的语言。C编译器和连接器是将C语言源代码转换为可执行代码的程序。
C语言程序是由一个或者多个函数组成的。每个C程序都必须包含一个名为main()的函数,因为当程序开始时要调用该函数。
每个C语句都是一个针对计算机的指令,并以一个分号作为结束标志。
语法错误为违反语言规则,语义错误为逻辑错误(在编译和链接时都不会报错)。
数据和运算符
编译器采用的数据模型:http://my.oschina.net/u/347414/blog/167756
整型数据平台通用性:http://blog.csdn.net/kongdefei5000/article/details/38866985
大端小端转换:http://blog.csdn.net/yeyuangen/article/details/9092717
程序内存中的堆栈:http://blog.sina.com.cn/s/blog_6c7c0f0b01013rjy.html
格式说明符: http://blog.sina.com.cn/s/blog_55036ca4010002th.html
转义字符: http://www.cnblogs.com/emanlee/archive/2010/05/14/1735274.html
强制类型转换:http://www.cnblogs.com/CBDoctor/archive/2011/12/06/2277918.html
运算符的优先级:
整型溢出 函数的声明
C语言中常量后缀可以使用大写和小写hl fl,但格式说明符只能使用小写字母 ubodx。
const和define的区别:http://blog.sina.com.cn/s/blog_79b01f6601018xdg.html
数组,指针,函数
int sum(int a[], int b[][4]); []中可以写数字
float rain[5][12]; 5个由12浮点数数组组成的数组
对形式参数使用const,const修饰变量 指针允许各种强制类型转换但无隐式
<string.h>
void *(memset) (void *s, int c, size_t n); /*store c throughout unsigned char s[n]*/
{
const unsigned char cuc = c;
unsigned char *uc;
for ( uc = s; 0 < n; ++uc, --n)
*uc = cuc;
return s;
}
void *(memcpy) (void *s1, const void *s2, size_t n)/*copy char s2[n] to s1[n] in any order*/
{
char *su1;
const char* su2;
for(sus = s1, su2 = s2; 0 < n; ++su1, ++su2, --n)
*su1 = *su2
return (s1)
}
char *(strncpy) (char *s1, const char *s2, size_t n)/*copy char s2[max n] to s1[n]*/
{
char *s;
for(s = s1; 0 < n && *s2 != '\n'; --n)
*s++ = *s2++;
for (; 0 < n; --n)
*s++ = '\n';
return (s1);
}
char *(strcpy) (char *s1, const char *s2) /*const char s2[] to s1[]*/
{
char *s = s1;
for (s = s1; (*s++ = *s2++) != '\0';)
;
return (s1);
}
size_t (strlen) (const char *s) /*find length of s[]*/
{
const char *sc;
for (sc = s; *sc != '\0'; ++sc)
;
return (sc - s);
}
char *(strncat) (char *s1, const char *s2, size_t n);/*copy char s2[max n] to end of s1[]*/
{
char *s;
for ( s = s1; *s != '\n'; ++s)
;
for ( ; 0 < n && s2 != '\0'; --n)
*s++ = *s2++;
*s = '\0'
return (s1);
}
其他:编码,左移右移
UTF-8 标准写法
utf8 MySQL的命令模式中(仅)
字符编码:
ASCII:256状态,一个字节
非ASCII:简体中文GB2312,2个字节表示一个汉字;其他语言不管了
Unicode:一个符号集,只规定了符号的二进制代码,没规定如何存储。容纳世界上100多万符号,可查询unicode.org
UTF-8:使用最广的一种Unicode的实现方式(UTF-16 二或四字节;UTF-32用4字节)
UTF-8介绍:
特点:一种变长的编码昂视,可使用1-4个字节表示一个符号
编码规则:前两位单字节符号,第一位为0,后七位为unicode码;对于n>1符号,第一个字节前n位为1,第n+1位为0;后面字节前两位一律为10;剩下的为unicode码。
编码使用(Notepad.exe)
ANSI: 英ASCII; 简中GB2312;繁Big5码;(big endian)
Unicode: UCS-2用两个字节存入字符的Unicode; (little endian)
Unicode: bigendian
UTF-8: 和实际存储顺序相关
左移右移
左移:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
右移:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1;无符号位补ling