相关疑难解决方法(0)

是否有任何平台指向不同类型的指针有不同的大小?

C标准允许指向不同类型的指针具有不同的大小,例如sizeof(char*) != sizeof(int*)是允许的.但是,它确实要求如果指针转换为a void*然后转换回其原始类型,则必须将其与原始值进行比较.因此,从逻辑上讲,sizeof(void*) >= sizeof(T*)对于所有类型T,正确吗?

在当今使用的大多数常见平台上(x86,PPC,ARM和64位变体等),所有指针的大小都等于本机寄存器大小(4或8字节),而不管指向的类型.是否存在任何深奥或嵌入式平台,其中指向不同类型的指针可能具有不同的大小?我特别询问数据指针,虽然我也有兴趣知道是否存在函数指针具有异常大小的平台.

我绝对不会问C++的指向成员的指针和指向成员的指针函数.这些在常见平台上具有不寻常的大小,甚至可以在一个平台内变化,具体取决于指针类的属性(非多态,单继承,多继承,虚继承或不完整类型).

c pointers sizeof

57
推荐指数
7
解决办法
4909
查看次数

指针的大小在C中是否有所不同?

可能的重复:
指针的大小可能会变化,具体取决于指向的内容?
是否有任何平台指向不同类型的指针有不同的大小?

指向c中浮点的指针大小是否可能与指向int的指针不同?尝试过之后,我得到了各种指针的相同结果.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("sizeof(int*): %i\n", sizeof(int*));
    printf("sizeof(float*): %i\n", sizeof(float*));
    printf("sizeof(void*): %i\n", sizeof(void*));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里有哪些输出(OSX 10.6 64位)

sizeof(int*): 8
sizeof(float*): 8
sizeof(void*): 8
Run Code Online (Sandbox Code Playgroud)

我可以假设不同类型的指针具有相同的大小(当然在一个拱门上)?

c pointers

30
推荐指数
7
解决办法
5万
查看次数

指针占用了多少字节?

我对指针和它们占用的字节有点困惑.在我的教科书中,它首先说明16位系统上的指针占用2个字节,32位系统占用4个字节,64位系统占用8个字节,依此类推.然后是10行,它表示指针占用了许多字节,这是保存地址所需的.这是我的问题:

  1. 那么这是否意味着如果我们在64位系统上说,地址最多需要8个字节?
  2. 如果我们在16位系统上,指针占用2个字节,并且地址需要更多2个字节,那么会发生什么?

c pointers

13
推荐指数
3
解决办法
4万
查看次数

POSIX对C中指针类型的限制

背景

POSIX标准增加了很多的库函数和其它标识符C语言.在dlsym()功能的描述中,它说(我强调):

概要

#include <dlfcn.h>

void *dlsym(void *restrict handle, const char *restrict name);
Run Code Online (Sandbox Code Playgroud)

描述

对dlsym()函数将获得符号的地址(一个功能标识符或数据对象标识符)...

C标准不保证函数指针可以转换为a void *,甚至不能保证指针的大小相同.这有效地增加了对C类型系统的额外限制.

我的问题是:

  • 对于C类型系统的这种限制是否有规范性参考,或者它只能从某些库函数的描述中推导出来?
  • POSIX甚至可以在一个系统上实现吗? sizeof (function pointer) > sizeof (void *)

参考

c posix function-pointers dlsym

13
推荐指数
1
解决办法
729
查看次数

如何理解"C++允许sizeof(char*)!= sizeof(int*)"?

我读这个帖子这是关系到charbyte,并遇到了下面的话:

一个int*仍然可以被实现为单个硬件指针,因为C++允许sizeof(char*) != sizeof(int*).

如何理解'C++允许sizeof(char*) != sizeof(int*)'?

c++ pointers language-lawyer

9
推荐指数
1
解决办法
524
查看次数

如何确定平台上的最大指针大小?

在(C和)C ++中,指向不同类型的指针不一定具有相同的大小。我本来希望void *一定是最大的,但实际上甚至没有保证。

我的问题:如何确定我的(编译目标)平台上最大的指针大小?

注意:我的意思是任何指针,包括指向类成员函数的指针。您可以从&运营商那里得到的东西。我的意思不是“口头地”称为指针的实体,即不是unique_ptr'或shared_ptr'之类的。

c++ pointers sizeof

5
推荐指数
1
解决办法
166
查看次数

C(void*)用作多态函数指针

我正在尝试创建一个系统调用处理程序,我不知道如何存储它.

我正在使用以下内容typedef来存储(void *)指针,该指针应该接收函数的地址和arg_no表示参数数量的整数.然后,我创建了一个这种类型的数组.

typedef struct
{
  void *foo;
  int arg_no;
}td_sys_call_handler;

td_sys_call_handler ish[SYSCALL_HANDLER_NUM];
Run Code Online (Sandbox Code Playgroud)

我正在尝试以下面的方式初始化数组.

  ish[0].foo  = void     (*halt) (void);                  ish[0].arg_no  = 0;
  ish[1].foo  = void     (*exit) (int status) NO_RETURN;  ish[1].arg_no  = 1;
  ish[2].foo  = pid_t    (*exec) (const char *file);      ish[2].arg_no  = 1;
  ish[3].foo  = int      (*wait) (pid_t);                 ish[3].arg_no  = 1;
  ish[4].foo  = bool     (*create) (const char *file, unsigned initial_size);
                                                          ish[4].arg_no  = 2;
  ish[5].foo  = bool     (*remove) (const char *file);    ish[5].arg_no  = 1;
  ish[6].foo  = …
Run Code Online (Sandbox Code Playgroud)

c polymorphism pointers void-pointers

4
推荐指数
2
解决办法
1381
查看次数

为什么这个C++代码不会出现编译错误?

#include<iostream>
using namespace std;

struct a{
    int e;
    struct abc *d;
};

struct abc{
    int c;
};

int main()
{
 return 0;  
}
Run Code Online (Sandbox Code Playgroud)

我已经定义了我已经声明了结构指针的struct abc后定义.这应该抛出编译错误,因为它在声明之前使用.但是,它没有,为什么?而当我刚刚取代它,而不是,这是给编译错误预期.struct aabcabcstruct abc dstruct abc *d

c++ struct pointers structure

4
推荐指数
2
解决办法
476
查看次数