gpt4 book ai didi

c - 将整数类型转换为指针时出现整数指针赋值故障

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:31 25 4
gpt4 key购买 nike

#include <stdio.h>
int main (void) {

int *a = (int *) 60;
int *b = (int *) 40;
printf("%lu\n", (a-b));
printf("Integer Size = %lu\n", sizeof (int));
printf("Pointer Size = %lu\n\n", sizeof (int *));

char *c = (char *) 60;
char *d = (char *) 40;
printf("%lu\n", (c-d));
printf("Character Size = %lu\n", sizeof (char));
printf("Pointer Size = %lu\n", sizeof (char *));

return 0;
}

输出:

5
Integer Size = 4
Pointer Size = 8

20
Character Size = 1
Pointer Size = 8

请解释输出。我无法理解的是 int *a = (int *) 60; 的作用?

最佳答案

int *a = (int *)60;

a声明为一个指向整数的指针,并将其设置为内存位置60。

int *b = (int *)40;

b 声明为一个指向整数的指针,并将其设置为内存位置 40。

当您对指针执行算术运算时,算术运算是以整数指向的数据类型的大小为单位进行的。所以

a - b

计算 ab 之间整数个数的差值。由于整数的大小为 4 字节,地址之间的差异为 20 字节,因此结果为 20/4 = 5

在第二段代码中,由于使用的是char而不是int,所以指针指向的是1字节的数据,所以指针减法和减法是一样的他们的地址。

一般来说,如果你有两个指针

T *a;
T *b;

其中 T 是任何类型,那么

a - b

相当于:

((char *)a - (char *)b)/sizeof(T)

关于c - 将整数类型转换为指针时出现整数指针赋值故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36274445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com