第5章 指针和数组(笔记)

来源:互联网 发布:sql having 用法 编辑:程序博客网 时间:2024/06/07 18:10
指针和数组之间的关系十分密切。

ANSI C使用类型void *(指向void指针)代替char *作为通用指针的类型。

5.1 指针与地址地址运算符&只能用于内存中的对象,即变量与数组元素。不能作用于表达式、常量或register类型的变量

一元运算符*是间接寻址或间接引用运算符。

指针只能指向某种特定类型的对象,每个指针都必须指向某种特定的数据类型。例外,指向void类型的指针可以存放指向

任何类型的指针,但不能间接引用其自身


一元运算符*和&的优先级比算术运算符的优先级高。

5.2 指针与函数参数5.3 指针与数组5.4 地址算数运算

指针与整数之间不能相互转换,但是0是唯一的例外,常数0可以赋值给指针。

有效的指针运算包括:

1.相同类型指针之间的赋值运算;

2.指针同整数之间的加法或减法运算

3.指向相同数组中元素的两个指针间的减法或比较运算;

4.将指针赋值为0或指针与0之间的比较运算。

5.5 字符指针与函数5.6 指针数组以及指向指针的指针5.7 多维数组

f(int (*daytab)[13])

这种声明形式表明参数是一个指针,指向具有13个整型元素的一维数组。因为

方括号【】的优先级高于*的优先级,所以上述声明中,必须使用圆括号。

如果去掉int *daytab[13];

相当于声明一个数组, 该数组有13个元素,每个元素都是一个指向整型对象的指针。

5.8 指针数组的初始化5.9 指针与多维数组

int a[10][20];
int *b[10];

是不一样的。

指针数组最频繁的用处是存放具有不同长度的字符串。

5.10 命令行参数

ANSI标准要求argv[argc]的值必须为一空指针。

5.11 指向函数的指针5.12 复杂声明

int *f(); f是一个函数,它返回一个指向int类型的指针。

int (*pf)(); pf:是一个指向函数的指针,该函数返回一个int类型的对象。

如果创建复杂的声明?比较好的方法是,使用typedef通过简单的步骤合成。

char **argv
指向char类型指针的指针

int (*daytab)[13]
指向int类型数组的指针。

int *daytab[13]
有13个成员的数组,每个成员是指向int类型的指针。

void *comp()
一个返回void指针类型的函数

void (*comp)()
一个指向返回void类型函数的指针。

char (*(*x())[])()
一个返回数组的函数,这个返回的数组包含指向返回char类型的函数的指针。

char (*(*x[3])())[5]
一个数组包含3个元素,这3个元素是指向返回含有5个char类型元素的数组的函数。


原创粉丝点击