指向数组元素的指针为什么可以+1以后便能指向下一个元素

C语言 码拜 7年前 (2017-05-06) 2274次浏览
指针的值类型是不是int型?(本人记得就是int型)int型的值做累加1以后应该就是比原来的值大1吧?例如指针p的值为2293264,那么加1以后应该是2293265吧?
但是在指向一个数组元素的时候本人发现并非本人所想的这样:

void main()
{
 int *p,a[] = {1,2,3,4,5,6,7,8,9,10};
    int *end = a+10;
    for(p = a;p < end;p++){
        printf("%i,\t%i\n",*p,p);
    }
    return;
}

结果:指向数组元素的指针为什么可以+1以后便能指向下一个元素
如上图,本人以为数组a中每个元素的指针的值会是一个以1为公差的等差数列,但实际上显示出来的是一个以4为公差的等差数列。为什么这种情况下,指针的值明明是int类型的,在加1以后的值,实际上是加4的值?

解决方案

5

指针的类型是指针,不是 int .

15

首先题主要明白,数组直接名字有2个含义,假如直接sizeof数组名的话,得到的是数组的完整大小,假如直接写数组的 话实际上又是首元素的地址   原因是数组有n个地址单元,而这个地址单元又是已知的+1的含义其实是移动到下一地址单元而非值加一,例如

int a[10];

a+1实际上是a+sizeof(int)*1
假如

char a[10];

a+1实际上是a+sizeof(char)*1


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明指向数组元素的指针为什么可以+1以后便能指向下一个元素
喜欢 (0)
[1034331897@qq.com]
分享 (0)