1.C语言中的符号重载
static 在函数内部,表示该变量的值在各个调用间一直保持延续性,在函数这一级,表示该函数只对本文件可见。
exter/缺省时 用于函数的定义,表示全局可见。用于变量,表示它在其他地方定义
2. 当sizeof的操作数是个类型名时,两边必须加上括号,但操作数如果是变量名则不必加括号。
例如: apple = sizeof(int)*P
|————————>'*'被编译器认为是乘号。
3. C语言中的优先级
圆下箭头一顿号
非凡增减富强针地长
三乘除,四加减,五移位
千万别把鱼忘记,它在盛饭的厨子里
小灯大灯灯灯不等
爸喂鱼,舅疑惑,裸鸡也疑惑
十三姨,十四父,十五逗,兜到低
“圆下箭头一顿号”指的是第15级的运算符。其中圆指的是运算符(),下指的是下标运算符[],箭头指的是指向结构体成员运算符->,顿号指的是结构体成员运算符、
“非凡增减富强针地长”指的是第14级的运算符。其中非指的是逻辑运算符!,凡指的是按位取反运算符~,增减指的是自增和自减运算符++和--,富指的是负号运算符-,强指的是类型转换运算符(类型),针指的是指针运算符*,地指的是地址运算符&,长指的是长度运算符Sizeof
“三乘除,四加减,五移位” 指的是第13级到第11级的运算符。其中三四五并无实际意义,只是起区分级别而已。也可以想象三指的是第13级运算符。乘除指的是乘法运算符*和除法运算符/,加减指的是加法运算符+和减法运算符-,移位指的是左移运算符<<和右移运算符>>
“千万别把鱼忘记,它在盛饭的厨子里”指的是求余运算符%,它位于盛饭的厨子里,即指和乘法运算符、除法运算符在一起。
“小灯大灯灯灯不等” 指的是第10级到第9级的运算符。其中小灯大灯指的是关系运算符<、<=、>和>=,灯灯指的是等于运算符==,不等指的是不等于运算符!=
“爸喂鱼,舅疑惑,裸鸡也疑惑”指的是第8级到第4级的运算符。其中,爸喂鱼之指的是第8级的按位与运算符&,舅疑惑指的是第7级的按位异或运算符^和第6级的按位或运算符||,裸鸡也疑惑指的是第5级、第4级的逻辑与运算符&&和逻辑或运算符||
“十三姨,十四父,十五逗,兜到低”指的是第3级到第1级的运算符。其中,十三姨指的是条件运算符?: (三有双重含义,即指?:的优先级别是三,它的运算符类型也是三目,?难道不是姨即疑惑吗?),十四父的十四没有实际意义,父指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,十五逗指的是第1级的运算符,兜到低指的是15级运算符以,结束。
1: Operators Associativity
2: () [] –> . left to right
3: ! ~ ++ -- + - * (type) sizeof right to left
4: * / % left to right
5: + - left to right
6: << >> left to right
7: < <= > >= left to right
8: == != left to right
9: & left to right
10: ^ left to right
11: | left to right
12: && left to right
13: || left to right
14: ?: right to left
15: = += -= *= /= %= &= ^= |= <<= >>= right to left
16: , left to right
例子:
优先级 表达式 实际结果 注释
—————————————————————————————————————————————————————————————
'.'的优先级高于'*' *P.f *(P.f) 对P去f偏移,作为指针,
->操作符可取消这个问题 然后进行解除应用操作
—————————————————————————————————————————————————————————————
[]高于* int *ap[] int *(ap[]) ap是个元素为int指针的数组
—————————————————————————————————————————————————————————————
函数()高于* int *fp() int *(fp()) fp是个函数,返回int *
4. 自动变量在堆栈中分配内存,当包含自动变量的函数或代码块退出时,他们所占用的内存便会被回收,解决方案:
a. 返回一个指向字符串常量的指针。
b. 使用全局声明的数组。
c. 使用静态的数组。
d. 要求使用者分配内存来保护函数的返回值,为了提高安全性,调用者应该同时质地昂缓冲区的大小