作业帮 > 综合 > 作业

C语言 关于*(p[1]+2)与*(a[1]+2)的差别问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/19 00:58:40
C语言 关于*(p[1]+2)与*(a[1]+2)的差别问题
若有定义int a[2][3]={1,2,3,4,5,6};int *p=a;这样的话当我用终端输出时不能输出*(p[1]+2) 它会说有三个错误,只可以输出*(a[1]+2) 可是为什么呢?如果我改为指向一维数组的指针时这两个又都没有编译错误了,为什么啊
如果定义时int *p=a 而程序又不能用p来操作二维数组元素 那么这里的p有什么用?
没有差别啊,只是符号不同,一个是p,一个是a.
应该是问*(p[1]+2)与(*a[1]+2)的差别吧
如果是的话:*(p[1]+2)是指针p[1]偏移二位后的位置处对应的值.
而(*a[1]+2)是指针a[1]对应的值加上2.
再问: 什么越界问题?
再答: 所以你改为指向一维数组的指针时这两个又都没有编译错误了
再问: 我不知道什么叫越界 能解释一下吗??
再答: 越界就是你本来定义一个数组a[5],你的下标最大只能是4,而你却在代码中写成a[7],这样的操作是属于非法操作。但你这里不属于这个问题。 上次忘了修改下我的回答。你的错误是P是一个一级指针,而你的a是一个二维数组属于二级指针。 将int **p=a 这样做p和a就没什么区别了,最大的区别就是a是一个指针常量 而p是一个指针变量