标签:
指针形式和下标形式
A> char *p = "abcdef";//定义一个字符串,用一个指针指向这个字符串
B>char a[] = "123456";//定义一个字符数组 a 是数组首元素的首地址,而不是数组的首地址
在上面的A>定义中,假如我们要取出c这个字符,那么有以下两种方法:
<1> 指针的形式:*(p+3)
<2>下标的形式:p[3]
两种方式,我们都可以这个进行理解:
编译器首先计算出p的值,也就是p所储存的地址值,然后加上偏移量3,得到一个新的地址,
然后再取出这个新地址里面所存储的数据,也就是字符c
例如,可以写出以下程序输出A>中定义的字符串。
#include <stdio.h> int main(void) { char *p="abcdef";//A> int iOffset = 0; for(iOffset=0;iOffset<strlen(p);iOffset++) printf("%c",*(p+iOffset)); return 0; }同理,在B>的定义下,假若我们要取出5这个数据,也有两种方法:
<1>指针的形式:*(a+4) ;此时,a代表的是数组首元素的首地址,然后用这个地址加上偏移量,
得到一个新的地址,再从这个地址取出数据
<2>下标的形式:a[4];一样。
值得注意的是,不知道你发现没有,上面所说的偏移量,有一个问题,在取出基地址(A>中的p值,B>中的a地址)后,
所加的偏移量应该是偏移数X每个元素的大小。上例中因为字符类型的内存大小刚好为1,所以很容易产生误导。特别注意!
C Language Study - 指针的形式 & 下标的形式
标签:
原文地址:http://blog.csdn.net/oimchuan/article/details/43991881