黑马程序员技术交流社区

标题: 指针神运算求解决 [打印本页]

作者: Thomas-王    时间: 2015-7-11 21:28
标题: 指针神运算求解决
本帖最后由 Thomas-王 于 2015-7-15 21:10 编辑

输出*p+i所指的数字
#include <stdio.h>
int main(int argc, const char * argv[])
{
    int a[]={1,2,3,4,5,7};
    int *p = a;
    int i;
    for (i=0; i<=4; i++)
      {
        printf("%d\t",*p+i);         //输出*p+i所指的各个数据
       }
    printf("\n");
    printf("* p+i  =  %d\n",*p+i);      //输出后一次使用完*p+i的值
   
    return 0;
}
电脑的运算结果是
1        2        3        4        5       
* p+i  =  6
可是我不明白为啥*p+i等于6,不应该是7,难道是把*p+i分解成(*p)+i了?

作者: 丁铭检    时间: 2015-7-13 22:12
你的难道是正确的。。。如果你想正确的输出你想要的值应该是*(p+i)
作者: Thomas-王    时间: 2015-7-13 22:39
丁铭检 发表于 2015-7-13 22:12
你的难道是正确的。。。如果你想正确的输出你想要的值应该是*(p+i)

我咋没看明白你说了啥。。。
作者: 丁铭检    时间: 2015-7-14 08:50
Thomas-王 发表于 2015-7-13 22:39
我咋没看明白你说了啥。。。

就是你的猜想是对的,也就是*p+i就等于*(p)+i。还有你想挨个输出数组a的值,你可以吧*p+i改成*(p+i)
作者: dushoupeng    时间: 2015-7-14 10:27
结果没问题。楼上解答没问题
作者: 983616547    时间: 2015-7-14 13:12
应该是*(p+i)
作者: 后街男孩    时间: 2015-7-14 20:04
你这样算的话就出错了 因为*p+i     是先计算*p 等于1 然后加上i的值 0~4 所以你会输出 1 2 3 4 5 但是不是数组的值, 最后一次跳出for循环的条件是i=5  所及*p+i=1+5=6  你应该将*p+i改成*(p+i)
作者: 弥修斯    时间: 2015-7-14 20:14
*(p+i)  = a[ i ]
*p 是 【qudizhi】 (取缔值?取地址?我听不明白) 一个数值
作者: 弥修斯    时间: 2015-7-14 20:18
{
    int a[]={1,2,3,4,5,7};
    int *p = a;   // 这里是不是应该是  *p=&a ? 我这理解不清了
    int i;
作者: 丁铭检    时间: 2015-7-23 08:56
弥修斯 发表于 2015-7-14 20:18
{
    int a[]={1,2,3,4,5,7};
    int *p = a;   // 这里是不是应该是  *p=&a ? 我这理解不清了

这个指针是用来存储地址的变量,你应该懂。。。那数组名就是数组的首地址能懂吗?
作者: 408205555    时间: 2015-7-23 10:47
我也是来学习的
作者: tangbinbin    时间: 2015-8-17 10:47
你 没理解指针运算的意义,*p指向地址代表内存单元的值,*p+i表示*p与i求和的运算,*(p+i)才表示指向(p+i)这个地址内存空间所存储的值,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2