A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Thomas-王 中级黑马   /  2015-7-11 21:28  /  684 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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了?

11 个回复

倒序浏览
你的难道是正确的。。。如果你想正确的输出你想要的值应该是*(p+i)
回复 使用道具 举报
丁铭检 发表于 2015-7-13 22:12
你的难道是正确的。。。如果你想正确的输出你想要的值应该是*(p+i)

我咋没看明白你说了啥。。。
回复 使用道具 举报
Thomas-王 发表于 2015-7-13 22:39
我咋没看明白你说了啥。。。

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

这个指针是用来存储地址的变量,你应该懂。。。那数组名就是数组的首地址能懂吗?
回复 使用道具 举报
我也是来学习的
回复 使用道具 举报
你 没理解指针运算的意义,*p指向地址代表内存单元的值,*p+i表示*p与i求和的运算,*(p+i)才表示指向(p+i)这个地址内存空间所存储的值,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马