1.

*p.age 与(*p).age是完全不同的,.优先级大于*

->优先级大于++

  即 ++p->a; p->a++ 都是成员进行++

  ++p->a 与++(p->a) 相同

 

  p->x 是一个整体,因为整个它才能表示一个变量,
  而p->++x是一个错误的语法,因为没有成员是 ++x的,
如果你想让其成员自增,可以这么写: ++p->x;或者
是p->x++,但要记住,p->x是一个整体,是不可分割属的
无论在任何情况下。如果你试图去列举一个可以分割的
例子的话,那么一定是错误的例子。

 

 

 

2.C预处理的功能

  a宏定义    b文件包含    c条件编译

3.

  1. Big-Endian(大端):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

  2.Little-Endian(小端):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

4.包含头文件 要优于声明函数类型,因为

  如果函数参数进行了修改,容易引发错误(声明的地方,往往忘记修改)

5. 外部链接标识符与本模块标识符如何区分

最近在看C语言的经典书籍——《The C Programming Language》,其中第二章讲到变量名时有这么一段话:“对于内部名而言,至少前31个字符是有效的。函数名与外部变量名包含的字符数目可能小于31,这是因为汇编程序和加载程序可能会使用这些外部名,而语言本身是无法控制加载和汇编程序的。对于外部名,ANSI标准仅保证前6个字符的唯一性,并且不区分大小写。” 怎么也读不懂,于是Google之,得到如下解释:

  A N S I标准规定,标识符可以为任意长度,但外部名必须至少能由前6个字符唯一地区分,并且不区分大小写。这里外部名指的是在链接过程中所涉及的标识符,其中包括文件间共享的函数名和全局变量名。因此外部名abcdefgh和abcdef将被当作同一个标识符处理。

A N S I标准还规定内部名必须至少能由前31个字符唯一地区分。内部名指的是仅出现于定义该标识符的文件中的那些标识符。C语言中的字母是有大小写区别的,因此count Count COUNT是三个不同的标识符。标识符不能和C语言的关键字相同,也不能和用户已编制的函数或C语言库函数同名。

6. 移位运算符优先级小于算法+ - 运算符 小于算术运算符

void main()
{
int i=1;
int m= 2<<i+4;
int t=2 <<5;
printf("%ld\n",t);
printf("%ld\n",m);

}
7. ,运算符优先级最小

 ,运算符结果,取右边的值作为结果。

8. 数组初始化

char buff[16]={0xff};  是全部赋值了,还是只赋值了第一个元素?? 

只赋值了第一个元素!

posted on 2020-05-13 15:19  redman274  阅读(120)  评论(0编辑  收藏  举报