c语言学习杂记(二)
(转自《系统程序员之路》)尽管C/C++通常是按值传递参数,而数组则是例外,在传递数组参数时,数组退化为指针
(即按引用传递),用sizeof是无法取得数组的大小的。
关键字valotile的作用是告诉编译器,不要把变量优化到寄存器里。在开发多线程并发的软
件时,如果这些线程共享一些全局变量,这些全局变量最好用valotile修饰。
在程序中,数据存放的位置主要有以下几个:
1.未初始化的全局变量(.bss段)
2.初始化过的全局变量 (.data段)
3.常量数据 (.rodata段)
4.代码 (.text段)
5. 栈(stack)
6.堆(heap)
柔性数组结构成员
C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其 他成员。柔性数组成员允许结构中包含一个大小可变的数组。sizeof返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
inine,内联函数
在C 中,为了解决一些频繁调用的小涵数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵数。
inline的使用是有所限制的,inline只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如while、switch,并且内联函数本身不能直接调用递归函数(自己内部还调用自己的函数)。
到这里我们不得不说一下在c语言中广泛被使用的#define语句,是的define的确也能够做到inline的这些工作,但是define是会产生副作用的,尤其是不同类型参数所导致的错误,由此可见inline有更强的约束性和能够让编译器检查出更多错误的特性,在c 中是不推荐使用define的。
realloc 可以对给定的指针所指的空间进行扩大或者缩小,无论是扩张或是缩小,原有内存的中内容将保持不变。当然,对于缩小,则被缩小的那一部分的内容会丢失。 realloc 并不保证调整后的内存空间和原来的内存空间保持同一内存地址。相反,realloc 返回的指针很可能指向一个新的地址。
页:
[1]