在C中,我的理解是char类型是1个字节,而int是4个字节。我想知道为什么以下代码不会引发错误:
char *n = malloc(sizeof(int));
n
旨在指向一块1字节的内存,但指向一块4字节的内存,这不是引起某种类型的问题吗?
((如果这是一个简单的问题,并且由于我的某些术语不够成熟,我深表歉意)。
谢谢!
n
旨在指向一块1字节的内存
不是,它也可能指向更多,而不是分配的内存的一个字节。
例如参见:
char *str;
str = malloc(100);
自sizeof(int) > sizeof(char)
起,即使结果打算用作malloc(sizeof(int))
指针,也绝对可以执行char *
。从技术上讲,它是[[没错,因为sizeof
的计算结果只是大于1的大小,但这肯定是错误的代码。
为什么不使用代码行:char * n = malloc(sizeof(int));抛出错误?
因为C编程语言没有static type checking,并且允许编写不是“类型安全”的代码。 malloc
公开的接口返回一个指针,该指针只是可以以任何可能的方式使用的抽象void*
指针。
C语言允许在任何两种类型之间强制转换值,并且没有一种静态的赋值类型检查。您可以随意犯任何错误,并且编译器没有义务以任何方式报告错误。我们C程序员负责编写适当的C代码,这些代码易于阅读,理解,正确,并且最重要的是,遵循语言规则,以免发生“未定义的行为”。
malloc
函数,我们可以分配一个内存块。因此,它可以指向一个内存字节或多个内存字节。 char *ptr
可以指向字符变量,也可以像char ptr[n]
一样起作用,其中n
是字符数组的大小。还请记住,malloc
返回一个void pointer
,因此为避免程序中出现任何类型的错误,请用以下代码替换代码:-