c语言学习记录三(转载)

结构体

点操作符的优先级高于间接访问操作符,故必须在表达式中使用括号,确保间接访问首先执行。

eg:void func (struct COMPLEX *cp) ;对应可以使用(*cp).f来访问这个变量所指向的结构的成员f。

简便形式:cp ->f

向函数传递指针的缺陷在于函数现在可以对调用程序的结构变量进行修改,可以在函数中使用const关键字来防止这类修改

位段是结构的一种,但它的成员长度以位为单位指定,位段声明在本质上是不可移植的,但是位段允许你把长度为奇数的值包装在一起以节省存储空间,如果需要访问一个值内部任意的一些位,使用位段比较简便。

访问嵌套的结构:

sizeof操作符能够得出一个结构的整体长度,包括因边界对齐而跳过的那些字节。如果必须确定结构某个成员的实际位置,应该考虑边界对齐因素,可以使用offsetof宏(定义于stddef.h)。

原型 : offsetof(type ,member)

联合体

  • 联合的所有成员引用的是内存中的相同位置
  • 联合变量可以被初始化,但初始值必须是联合第一个成员的类型,而且它必须位于一对花括号里面

eg:

 
  1. union {

  2. int a;

  3. float b;

  4. char c[4];

  5. } x = {5};

注意:具有相同成员列表的结构声明产生不同类型的变量。

如果操作系统无法向malloc提供更多的内存,malloc就返回一个空指针。所以需要对每个malloc返回的指针进行检查,确保并非空指针是很有必要的。

malloc和calloc之间的主要区别在于后者在返回指向内存的指针之前把它初始化为0。realloc函数在于修改一个原先已经分配的内存块的大小,在使用realloc之后,就不能再使用指向旧内存的指针,而是应该改用realloc所返回的新指针。如果realloc函数的第一个参数是NULL,那么它的行为同malloc一样。

猜你喜欢

转载自blog.csdn.net/CH_sir/article/details/107877177
今日推荐