注册 登录
编程论坛 C语言论坛

关于指针+1与内址地址变化数量问题

niuniuchiniu 发布于 2019-09-09 12:08, 2741 次点击
大佬们,代码如下:
#include
#include
int main()
{
    int vector[] = { 1,13,1231 };
    int *p = vector;
   
    printf("%p\n", p);
    p += 1;

    printf("%p\n", p);

    /*
    001FF97C
    001FF980
   
    */
}
1个16进制表示2个字节,int 型的指针向前加1,即4个字节,也就是2个16进制地址,但答案如上,是4个16进制地址,请问是哪里错了,大谢。
5 回复
#2
rjsp2019-09-09 13:56
1个16进制表示2个字节
听不懂你在说什么

在你的编译器中 sizeof(int) 等于 4,所以
001FF97C + 4 == 001FF980 很正确
#3
zbjzbj2019-09-09 14:02
哪也没错,内存地址是以字节为单位的。
#4
bcbbcclbbc2019-09-10 10:39
回复 楼主 niuniuchiniu
1个字节8位(8个二进制数)
int类型4个字节,共32位也就是32个二进制数。
1位表示一个二进制数;
3位表示一个八进制数;
4位表示一个十六进制数;
一个int类型数据为8个十六进制数。
(001ff97c)=二进制数(00000000000111111111100101111010)
(001ff980)=二进制数(00000000000111111111100110000000)
可以参考一下
#5
niuniuchiniu2019-09-11 23:27
回复 4楼 bcbbcclbbc
谢谢谢谢!您的认真解决了我的大问题.
#6
jklqwe1112019-09-12 00:15
数据类型与进制是两个完全不同的概念,不要混为一谈。
1