码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-03-01 00:24:39      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

指针形式和下标形式

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!