#include<stdio.h>
#define int int*
main(){
int *p,q;
p=(int *)5;
q=10;
printf("%d",q+p);
}
我的问题是,在
p=(int *)5
行和q=10
中它是如何在内部正常工作的,因为p
和q
都是指针类型,我们怎么可能为指针变量q
分配一个整数值? 。此类型转换p=(int*)5
在这里如何工作的另一件事?通过使用此公式,我们可以回答
新地址=旧地址+数字* sizeof指针指向的数据类型
最佳答案
#define int int*
将int *p, q
替换为int* *p, q
。因此,此处p
是指向int
的双指针,而q
是int
类型。
例如,考虑以下具有相同逻辑的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/