为什么int指针“++”增加4而不是1?
指针的值是一个variables的地址。 在int指针增加1后,为什么int pointer值增加了4个字节。 
在我看来,我认为指针增量后指针的值(variables地址)只增加1个字节。
testing代码:
 int a = 1, *ptr; ptr = &a; printf("0x%X\n", ptr); ptr++; printf("0x%X\n", ptr); 
预期产出:
 0xBF8D63B8 0xBF8D63B9 
其实输出:
 0xBF8D63B8 0xBF8D63BC 
编辑 :
 另外一个问题 – 如何访问一个int占用的4个字节? 
 当您增加T* ,它会移动sizeof(T)个字节。  †这是因为移动任何其他值是没有意义的:例如,如果我指向一个4字节大小的int ,那么递增小于4的数字会使我处于什么状态? 与其他数据混合的部分int :无意义的。 
在内存中考虑这一点:
  [↓ ] [...|0 1 2 3|0 1 2 3|...] [...|int |int |...] 
当我增加指针时更有意义? 这个:
  [↓ ] [...|0 1 2 3|0 1 2 3|...] [...|int |int |...] 
或这个:
  [↓ ] [...|0 1 2 3|0 1 2 3|...] [...|int |int |...] 
 最后一个实际上并不指向任何types的int 。  (从技术上说,那么使用那个指针就是UB 。) 
 如果你真的想移动一个字节,增加一个char* : char*的大小总是为1: 
 int i = 0; int* p = &i; char* c = (char*)p; char x = c[1]; // one byte into an int 
  †这个推论是,你不能增加void* ,因为void是一个不完整的types。 
指针增量是基于指向的types的大小。 如果一个int是4个字节,那么int *增加1会使它的值增加4。
如果short是2个字节,则将short *加1将使其值增加2。
这是C指针algorithm的标准行为。
 如果指针指向char,则pointer++增加指针types的大小,如果指针指向1234字节的结构, pointer++会将指针递增1,而pointer++会将指针递增1234。 
 这可能会让你第一次遇到混淆,但实际上它有很大的意义,这不是一个特殊的处理器特性,但是编译器在编译期间计算它,所以当你编写pointer+1 ,编译器将它编译为pointer + sizeof(*pointer) 
这个想法是,在增加之后,指针指向内存中的下一个int。 由于ints是4个字节宽,所以增加了4个字节。 通常,typesT的指针将按sizeof(T)
 正如你所说的,一个int pointer指向一个int 。 一个int通常占用4个字节,因此,当你增加指针时,它指向内存中的“next” int ,即增加4个字节。 它适用于任何types的尺寸。 如果你有一个指向typesA的指针,那么递增一个A* ,它将以sizeof(A)递增。 
 考虑一下 – 如果你只增加1个字节的指针,它将指向一个int的中间,我不能想到一个机会,这是需要的。 
例如,在迭代数组时,这种行为非常舒服。