【发布时间】:2014-12-18 07:05:26
【问题描述】:
我只想知道在函数调用期间作为实际参数给出的字符数组是否存储在一些内存中。 例如:
void printIt(char* ptr) {
......
}
这个函数调用如下:
printIt("hallo");
这很好用。但是,如果我们传递一个整数并将其作为 int* 接收,它将不起作用,因为我们没有为它分配内存。那么编译器是否会自动为作为参数传递的字符数组分配内存?
【问题讨论】:
-
您不是在传递一个数组,而是在传递一个指向第一个元素的指针。数组不能传值。
-
注意
"hallo"是一个常量字符串;任何修改它的尝试都会导致未定义的行为。理想情况下,该函数应定义为void printIt(const char *ptr) { … }或等效项。 -
嗯某处它必须有一些内存分配给它。你知道,计算机将数据存储在... 内存中。 所以是的,6 个字节(
h、a、l、l、o和终止 NUL)分配给字符串文字。这与数组在传递给函数时衰减为指针这一事实完全无关。字符串文字是一个数组。单个int不是数组。因此,在预期指向char的指针时传递字符串文字将起作用,而在预期int *时传递int将不起作用。 -
对于 windows (.exe) 文件。该字符串存储在
.data部分中。不确定它是否需要“内存分配”。我认为只有它的地址被传递给函数。 -
它肯定需要分配内存,否则不会有地址可以传递。它可能存储在只读数据部分或该函数的堆栈中....不确定实际使用的是哪个