C标准允许指向不同类型的指针具有不同的大小,例如sizeof(char*) != sizeof(int*)是允许的.但是,它确实要求如果指针转换为a void*然后转换回其原始类型,则必须将其与原始值进行比较.因此,从逻辑上讲,sizeof(void*) >= sizeof(T*)对于所有类型T,正确吗?
在当今使用的大多数常见平台上(x86,PPC,ARM和64位变体等),所有指针的大小都等于本机寄存器大小(4或8字节),而不管指向的类型.是否存在任何深奥或嵌入式平台,其中指向不同类型的指针可能具有不同的大小?我特别询问数据指针,虽然我也有兴趣知道是否存在函数指针具有异常大小的平台.
我绝对不会问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)
我可以假设不同类型的指针具有相同的大小(当然在一个拱门上)?
我对指针和它们占用的字节有点困惑.在我的教科书中,它首先说明16位系统上的指针占用2个字节,32位系统占用4个字节,64位系统占用8个字节,依此类推.然后是10行,它表示指针占用了许多字节,这是保存地址所需的.这是我的问题:
该POSIX标准增加了很多的库函数和其它标识符C语言.在dlsym()功能的描述中,它说(我强调):
概要
Run Code Online (Sandbox Code Playgroud)#include <dlfcn.h> void *dlsym(void *restrict handle, const char *restrict name);描述
在对dlsym()函数将获得符号的地址(一个功能标识符或数据对象标识符)...
C标准不保证函数指针可以转换为a void *,甚至不能保证指针的大小相同.这有效地增加了对C类型系统的额外限制.
我的问题是:
sizeof (function pointer) > sizeof (void *)dlsym()功能我读这个帖子这是关系到char和byte,并遇到了下面的话:
一个
int*仍然可以被实现为单个硬件指针,因为C++允许sizeof(char*) != sizeof(int*).
如何理解'C++允许sizeof(char*) != sizeof(int*)'?
在(C和)C ++中,指向不同类型的指针不一定具有相同的大小。我本来希望void *一定是最大的,但实际上甚至没有保证。
我的问题:如何确定我的(编译目标)平台上最大的指针大小?
注意:我的意思是任何指针,包括指向类成员函数的指针。您可以从&运营商那里得到的东西。我的意思不是“口头地”称为指针的实体,即不是unique_ptr'或shared_ptr'之类的。
我正在尝试创建一个系统调用处理程序,我不知道如何存储它.
我正在使用以下内容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) #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