/*
读书笔记类型多种多样,有摘抄型的,有感想型的,有批注型的,有摘要型的……
现在正在研读《C和指针》,其中有很多我认为必要的知识点,摘抄并简单整理了一下,记录在这里。
*/
29. memxxx函数提供了类似字符串函数的功能,但它们可以处理包括NUL字节在内的任意字节。这些函数都接受一个长度参数。
memcpy从源函数向目标函数复制长度参数指定的字节数。
memmove函数执行与memcpy相同的功能,但它能正确处理源参数与目标参数出现重叠的情况。
memcmp函数比较两序列的字节。
memchr函数在一个字节序列中查找一个特定的值。
memset函数把一序列字节初始化为一个特定的值。
30. 结构成员的访问。直接访问用点操作符(.),左操作数就是结构变量的名字,右操作数就是需要访问的成员的名字;间接访问用箭头操作符(->),左操作数必须是一个指向结构的指针,右操作数同点操作符。
31. 结构自引用:
struct SELF_REF1
{
int a;
struct SELF_REF1 b;
int c;
};
这种类型的自引用是非法的。这种声明进行下去,就像一个永远不会终止的递归程序。
合法的声明如下:
struct SELF_REF2
{
int a;
struct SELF_REF2 *b;
int c;
};
b是一个指针,而不是一个结构。事实上它所指向的是同一种类型的不同结构,可以用来实现更高级的数据结构,如链表和树。
32. 警惕下面的陷阱:
typedef struct
{
int a;
SELF_REF3 *b;
int c;
} SELF_REF3;
这个声明的目的是为了这个结构创建类型名为SELF_REF3. 但是它失败了,因为类型名直到声明的末尾才定义,所以在结构声明的内部,它尚未定义。
解决方案:
typedef struct SELF_REF3_TAG
{
int a;
struct SELF_REF3_TAG *b;
int c;
}SELF_REF3;
文章评论(0条评论)
登录后参与讨论