Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的泛型指针与内存分配_C_Void Pointers - Fatal编程技术网

C语言中的泛型指针与内存分配

C语言中的泛型指针与内存分配,c,void-pointers,C,Void Pointers,机器如何知道为通用指针分配多少空间?是否仅在强制转换为类型时才分配 在大多数平台上,指针的大小通常是固定的,这取决于编译系统的内存体系结构。关于这一点,他们的类型无关紧要。int点的大小与复杂结构的点的大小相同。它是无效的这一事实并没有改变这一点。在大多数平台上,指针的大小通常是固定的,这取决于编译系统的内存体系结构。关于这一点,他们的类型无关紧要。int点的大小与复杂结构的点的大小相同。它的void这一事实不会改变这一点。所有指针的大小都是编译器在编译时已知的;指向的项目的大小可能不同。您可以

机器如何知道为通用指针分配多少空间?是否仅在强制转换为类型时才分配

在大多数平台上,指针的大小通常是固定的,这取决于编译系统的内存体系结构。关于这一点,他们的类型无关紧要。
int
点的大小与复杂
结构的点的大小相同。它是无效的这一事实并没有改变这一点。

在大多数平台上,指针的大小通常是固定的,这取决于编译系统的内存体系结构。关于这一点,他们的类型无关紧要。
int
点的大小与复杂
结构的点的大小相同。它的
void
这一事实不会改变这一点。

所有指针的大小都是编译器在编译时已知的;指向的项目的大小可能不同。您可以自己将所需大小传递给
malloc
/
calloc
,这样编译器就不会有分配问题


编辑(回应评论)在某些情况下,不同指针的大小不同。例如,在为哈佛体系结构编译的代码中,数据指针必须包含一个额外的存储器,以区分存储在程序内存中的数据与存储在数据内存中的数据,而函数指针不需要该额外存储器。但是,编译器知道这一点,因此它通过查看指针的类型知道所需的分配大小。

所有指针的大小都是编译器在编译时已知的大小;指向的项目的大小可能不同。您可以自己将所需大小传递给
malloc
/
calloc
,这样编译器就不会有分配问题


编辑(回应评论)在某些情况下,不同指针的大小不同。例如,在为哈佛体系结构编译的代码中,数据指针必须包含一个额外的存储器,以区分存储在程序内存中的数据与存储在数据内存中的数据,而函数指针不需要该额外存储器。但是,编译器知道这一点,因此它可以通过查看指针的类型来了解所需的分配大小。

指针的大小都是相同的,无论它们指向什么,只有它们指向的东西可以是不同的大小。

指针的大小都是相同的,无论它们指向什么,只有他们指向的东西可以有不同的大小。

我不确定你所说的“通用指针”是什么意思,但如果你指的是“指向void的指针”,它只是一种能够表示任何其他指针值的类型。这并不意味着它必须任意大;事实上,它(定义为)与“指向字符的指针”的大小和表示形式相同,也可以指向任何类型。

我不确定“通用指针”是什么意思,但如果你指的是“指向无效的指针”,它只是一种能够表示任何其他指针值的类型。这并不意味着它必须任意大;事实上,它定义为“与字符指针相同”的大小和表示,它也可以指向任何类型。

C不是C++,讨论模板不属于这里。提到“泛型”指针,我被吓倒了。我同意,OP使用了未定义的术语“泛型指针”,这使得这个问题很难回答……而这个答案仍然是错误的;所有指针不必具有相同的大小。例如,在PDP上…@R。。你在说什么?PDP-11类型的16位指针大小相当一致;68000人也是如此。另一方面,6502允许在0x00FF页面中使用单字节地址进行“快速”访问。8051使用每个数据指针三字节来区分数据存储器和程序存储器,但只有两个字节用于函数指针,因为函数不能进入数据存储器。C不是C++,讨论模板不属于这里。@可变字符编码器OOP,你说得对!提到“泛型”指针,我被吓倒了。我同意,OP使用了未定义的术语“泛型指针”,这使得这个问题很难回答……而这个答案仍然是错误的;所有指针不必具有相同的大小。例如,在PDP上…@R。。你在说什么?PDP-11类型的16位指针大小相当一致;68000人也是如此。另一方面,6502允许在0x00FF页面中使用单字节地址进行“快速”访问。8051使用每个数据指针三个字节来区分数据内存和程序内存,但函数指针只有两个字节,因为函数不能进入数据内存。C标准没有声明所有指针都是相同大小的,在一些古老的体系结构上,它们绝对不是相同大小的(虽然我手头没有任何例子)。好吧,那么我之前的绝对陈述是错误的,但是你会说这通常是正确的吗?如果你说“在大多数平台上”C标准没有声明所有指针的大小都是相同的,在一些古老的体系结构上,它们的大小肯定不一样(尽管我手头没有任何示例).好吧,那么我之前的绝对陈述是错误的,但你会说这通常是正确的吗?如果你说“在大多数平台上”,那么我认为这是正确的。