【发布时间】:2013-09-18 22:24:13
【问题描述】:
我对 C 中数组的理解正确吗? 数组只不过是一种语法便利,例如,当您在 C 代码中声明一个数组时:
type my_array[x];
编译器认为它等同于:
type *my_array = malloc(sizeof(*my_array) * x);
使用free 系统调用,一旦我们离开my_array 的范围,就会释放my_array。
一旦my_array 被声明
my_array[y];
只不过是:
*(my_array + y)
将其转换为字符串;我也想知道幕后发生了什么
char *my_string = "Hello"
和
my_string = "Hello"
【问题讨论】:
-
不完全是。当您执行
type my_array[x]时,编译器确实将其视为一个数组,甚至知道在编译时sizeof(my_array)是x * sizeof(type),但如果您声明type *my_array = malloc(x * sizeof(type)),情况并非如此。在这种情况下,sizeof(my_array)是指向编译器类型的指针的大小。 -
不要假设 C 编译器会为您创建
malloc和free调用。这将完全违背该语言的目标,该目标应该让您绝对控制您使用的内存,特别是在 malloc 可能非常昂贵的受限环境中。还有其他内存存储机制。 -
另一个区别:数组在其生命周期内指向同一个地址,而指针可以更改。
标签: c arrays string pointers malloc