对今天学习C语言的做个小结。今天学习到了指针与数组这一块了,对于学习指针我都是很细心的一个点一个点看,在C语言中,指针与数组之间的关系是非常重要的,所以必须重视。首先知道通过数组下标能完成的任何操作都可以通过指针来实现的,用指针来编写的程序会比用数组下标编写的程序执行速度快,但是,指针实现的程序理解起来会比较吃力一些的了
首先举个例子说说吧
声明
int a[10];
定义了一个长度为10的数组a。意思就是说它定义了10个对象组成的集合,这是个对象存储在相邻的内存区域中,名字分别为a[0],a[1],···a[9],如图(一)所示:
图一:
a[i]表示该数组的第i个元素。那么pa的声明为int *pa;则说明它是一个指向整型对象的指针,那么,赋值语句pa=& a[0];则可以将指针pa指向数组a的第0个元素,也就是说,pa的值为数组元素a[0]的地址。如图(二)所示:
图二:
这样子呢,赋值语句 x = *pa;将把数据元素a[0]中的内容复制到变量x中了。我们就可以推理出pa+1就将指向下一个元素,pa+i将指向pa所指向数组元素之后的第i个元素,同理,pa-i指向pa所指向数组元素之前的第i个元素。那么,如果指针pa指向a[0],那么*((pa+1)引用的是数组元素a[1]的内容,pa+1是数组元素a[i]的地址,*((pa+1)引用的是数组元素a[i]的内容。如图(三)所示:
图三:
无论数组a中的元素类型或数组长度是什么,上面的结论都成立。“指针加1”就意味着pa+1指向pa所指向的对象的下一个对象。
接下来说的是下标和指针的元算,这两者有着非常密切的关系!