C语言深度剖析--第一章
时间:2010-08-31 来源:luoyan_xy
一些关于C语言中常用的知识点,看书的同时整理一下。
1)return语句不可返回指向“栈内存”的“指针”,因为该内存在函数体结束的时候被自动销毁。 如果需要返回指针变量的话,需要在堆上位指针分配空间
2)const修饰的变量属性为只读,编译器通常不为普通const变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作,效率较高。
从汇编角度看,const定义的只读变量只是给出了对应的内存地址,而不是像#define一样给出立即数,所以,const定义的只读变量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干拷贝。
3)C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。
typedef struct st_type typedef struct st_type
{ {
int i; int i;
int a[0]; 或者 int a[];
}type_a; }type_a;
此时sizeof(type_a) = 4,0元素数组没有占用空间。
type_a *p = (type_a *)malloc(sizeof(type_a) + 100*sizeof(int));
此时即可通过p->item[n]访问变长的数组,注意此时sizeof(type_a) = 4.
4)union结构,用于字符大小端的判断与转换,一个很有技巧的方法。
5)int main()
{
int a[5] = {1,2,3,4,5};
int *ptr1 = (int *)(&a + 1);
int *ptr2 = ((int)a + 1);
printf("%x,%x",ptr1[-1],*ptr2);
return 0;
}
我感觉第一个语句打印5,第二个打印2,有待验证。。
6)typedef struct student
{
//code
}stu_st,*stu_pst;
此时,const stu_pst stu3,stu_pst const stu4,这里的const分别修饰哪个对象?
答案貌似是都用来修饰对象本身而非指针,有待确认
7) 还有一个比较长的题目,看了需要编代码测试了,测试后会把结果写到这里的。。
相关阅读 更多 +