gpt4 book ai didi

数据指针和函数指针的指针大小可以不同吗?

转载 作者:太空狗 更新时间:2023-10-29 16:26:48 25 4
gpt4 key购买 nike

我刚刚阅读了 C FAQ on pointers 的部分.

它讨论了不能使用 void * 指针来保存函数指针,因为指向数据的指针和指向函数的指针在某些平台上可能具有不同的大小,而 void * 是只保证足够大以容纳指向数据的指针。

谁能举一个平台的例子,其中指向数据的指针和指向函数的指针实际上具有不同的大小?

最佳答案

> type ppp.c
#include <stdio.h>
#include <stdlib.h>

int global = 0;

int main(void) {
int local = 0;
static int staticint = 0;
int *mall;
int (*fx)(void);

fx = main;
mall = malloc(42); /* assume it worked */
printf("#sizeof pointer to local: %d\n", (int)sizeof &local);
printf("#sizeof pointer to static: %d\n", (int)sizeof &staticint);
printf("#sizeof pointer to malloc'd: %d\n", (int)sizeof mall);
printf("#sizeof pointer to global: %d\n", (int)sizeof &global);
printf("#sizeof pointer to main(): %d\n", (int)sizeof fx);
free(mall);
return 0;
}
> tcc -mc ppp.c
Turbo C Version 2.01 ...
warnings about unused variables elided ...
Turbo Link Version 2.0 ...
> ppp
#sizeof pointer to local: 4
#sizeof pointer to static: 4
#sizeof pointer to malloc'd: 4
#sizeof pointer to global: 4
#sizeof pointer to main(): 2
> tcc -mm ppp.c
> ppp
#sizeof pointer to local: 2
#sizeof pointer to static: 2
#sizeof pointer to malloc'd: 2
#sizeof pointer to global: 2
#sizeof pointer to main(): 4

tcc -mc 在“紧凑”模型中生成代码; tcc -mm 在“中等”模型中生成代码

关于数据指针和函数指针的指针大小可以不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1473935/

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