#include<stdio.h>

#define int int*

main(){
    int *p,q;
    p=(int *)5;
    q=10;
    printf("%d",q+p);
}


我的问题是,在p=(int *)5行和q=10中它是如何在内部正常工作的,因为pq都是指针类型,我们怎么可能为指针变量q分配一个整数值? 。此类型转换p=(int*)5在这里如何工作的另一件事?

通过使用此公式,我们可以回答

新地址=旧地址+数字* sizeof指针指向的数据类型

最佳答案

#define int int*int *p, q替换为int* *p, q。因此,此处p是指向int的双指针,而qint类型。

例如,考虑以下具有相同逻辑的char程序

#include<stdio.h>
#define char char*
main()
{
    char *p,q;
    printf("%d, %d\n", sizeof(p), sizeof(q));
}


输出是

4, 1


p=(int *)5;-此语句也将像p=(int* *)5;一样被preporcessor代替。因此,它不会引发任何警告。

因此,如果使用32位计算机,则printf("%d",q+p);将为您提供45;如果使用64位计算机,则85将为您提供。

关于c - 分配/类型转换整数到指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12108160/

10-11 22:01
查看更多