C语言学习总结
程序员文章站
2022-07-15 08:50:59
...
目录
变量与函数
- 变量既可以定义为外部的(全局的)也可以定义为局部的;函数只能定义为全局的,也就是说不能在函数中再定义函数。
- 全局变量和函数从其声明的地方开始生效,到其所在文件末尾失效。
- 函数的声明既可以在函数外部也可以在函数内部(对于函数来说声明不同于定义),以int max(int x, int y)为例:
在函数外声明:
...
int max(int x, int y); //声明函数
int main(){...}
int max(int x, int y){...} //函数定义
...
在函数内部声明(只在声明其的函数内部生效):
...
int main()
{
int x, y, max(int x, int y); //声明了一个两个int形参和返回int的函数
...
max(x, y);
}
int max(int x, int y){...} //函数定义
...
指针与数组
-
C语言的一大优点就是将指针、数组和地址的算术运算结合起来。使用数组下标所能完成的操作用指针都能完成。一般来说,用指针编写的程序比用数组下标编写的程序要快,因为所有的下标都要转换为指针形式,如:
在取a[i]值时C语言要首先转化为地址a+i然后在访问其值。 -
有效的指针运算:相同类型指针之间的赋值运算、指针同整数之间的加减运算、指向相同数组中的两个指针之间的减法或赋值运算、将指针赋值为0或与0之间的比较运算。
-
void * 指针指向空类型的元素,且任何类型的指针转换为void *,并且在将它转换回原来的类型时不会丢失信息,可用于编写一些可复用、通用性好的函数,如malloc函数。
位运算
- &:常用来将某位数置为0,如:11110110 & 11111101 = 11110100将第二位置为0,别的位保持不变。
- |:常用来将某位数置为1,如:11110110 | 00001000 = 11111110将第四位置为1,别的位保持不变。
- ^:常用来将某位数取反,如:11110110 ^ 00000010 = 11110100将第二位取反,别的位保持不变。
运算符和优先级
- C语言中的单目运算符(除()、[])都是自右向左结合的,[]的优先级较高,可注意int *a[5]与int (*a)[]的不同。
- 条件运算符?:也是自右向左结合。
- “.”、“->”、“()”和“[]”4个运算符优先级最高。
-
C语言没有指定同一运算符中多个操作数的计算顺序(除&&、||、?:和,),也没有指定函数中各参数的求值顺序,如:
a[i] = i++;不同的编译器会给出不同的结果,不能确定a[i]中i的取值。
printf(“%d %d\n”, ++n, power(2, n));不同的编译器会给出不同的结果,不能确定power(2, n)的调用是在++n之后还是之前。所以应当尽量避免使用此种含糊不清的语句。
例:比较*s++、(*s)++、*++s和++*s
*s++ 等价于*s, s++;
(*s)++ 等价于*s += 1;
*++s等价于++s,*s;
++*s等价于++(*s)。
持续更新中。。。。。。
上一篇: #C语言学习笔记#排序数字问题(冒泡法)
下一篇: 2018秋季C语言学习总结