C Language Study - 指针的形式 & 下标的形式

来源:互联网 发布:html5引导动画源码 编辑:程序博客网 时间:2024/04/30 16:46

指针形式和下标形式

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,所以很容易产生误导。特别注意!




1 0
原创粉丝点击