《C和指针》这本书是暑假看的,看的不算精吧,也可以说是原来懂得巩固一下,之前没有理解的这次还是没有彻底弄明白。我就把我看的比较仔细地方做一点整理。
先讲数组这块,我们先考虑下面这个例子:
int a[10];
int b[10];
int *c;
……
c = &a[0];
表达式&a[0]是一个指向数组第一个元素的指针。但那正是数组名本身的值,所以下面这条赋值语句和上面那条赋值语句所执行的任务是完全一样的;
c = a;
这条赋值语句说明了为什么理解表达式中的数组名的真正含义是非常重要的。如果数组名表示整个数组,这条语句就表示整个数组被复制到一个新的数组。但事实上完全不是这样,实际被复制的是一个指针的拷贝,c所指向的是数组的第一个元素。因此,像下面这样的表达式:
b = a;是非法的。你不能把赋值符把一个数组的所有元素复制到另一个数组。你必须使用一个循环,每次复制一个元素。考虑下面这条语句
a = c;c被声明为一个指针变量,这条语句看上去像是执行某种形式的指针赋值,把c的值复制给a,但这个赋值是非法的:记住!在这个表达式中,a的值是个常量,不能被修改。
指针和下标:
如果你可以互换地使用指针表达式和下标表达式,那么你应该先使用哪个呢?和往常一样,并没有一个简明的答案,但对于绝大多数人而言,下标更加容易理解。可读性方面下标比较占有优势,但在另一个方面,指针可能效率会更高一些。
让我们来研究两个循环:
首先,我们使用下标方案