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

不是指针无论是什么类型都是4个字节吗?

编程小猪 发布于 2022-10-17 19:00, 1150 次点击
#include <stdio.h>
int main(){
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    double *p2=(double*)&arr[0];
    p2++;
    printf("%d\n",*((int*)p2));      //输出为3
    printf("%d\n",sizeof(p2));       //输出为8
    return 0;
}

为什么输出的结果是3?不是指针无论是什么类型都是4个字节吗?
在b站上课是说:“一个指针变量,无论它指向的变量占几个字节
该指针变量本身只占四个字节。”
6 回复
#2
hoshiihoshii2022-10-17 20:08
指针变量存的是地址,32位系统就是4个字节,64位系统就是8个字节
#3
吹水佬2022-10-18 07:19
要注意指针除了“地址”属性外还有个“大小”属性,清楚p2++后p2指到哪。
试试这样看看
程序代码:
#include <stdio.h>
int main()
{
    int arr[10]= {1,2,3,4,5,6,7,8,9,10};
    double *p2=(double*)&arr[0];
    p2++;
    arr[2] = 123;
    printf("%d\n",arr[2]);
    printf("%d\n",*((int*)p2));
    printf("%d\n",sizeof(double));
    return 0;
}


[此贴子已经被作者于2022-10-18 07:22编辑过]

#4
apull2022-10-18 08:55
p+1中指针p偏移量是p的类型决定的,double类型偏移8字节,char偏移1字节,int是4字节。
#5
编程小猪2022-10-18 13:15
回复 2楼 hoshiihoshii
谢谢大佬
#6
编程小猪2022-10-18 13:15
回复 3楼 吹水佬
谢谢大佬,我懂了
#7
编程小猪2022-10-18 13:15
回复 4楼 apull
okok,记住了谢谢大佬
1