是否为函数调用中作为实际参数给出的字符数组分配内存

Is memory allocated for a character array given as actual parameter in a function call?

本文关键字:字符 分配 内存 数组 参数 函数调用 是否      更新时间:2023-10-16

我只想知道在函数调用期间作为实际参数给出的字符数组是否存储在某个内存中。前任:

void printIt(char* ptr) {
......
}

此函数的调用方式如下:

printIt("hallo");   

这工作正常。但是如果我们传递一个整数并将其作为 int* 接收,它将不起作用,因为我们没有为它分配内存。那么编译器是否会自动为作为参数传递的字符数组分配内存?

已编辑以反映注释中的输入:

你是在问它在记忆中的什么地方吗?字符串"hallo"在只读内存中作为字符串文本保存。因此,必须传递一个指针(该指针保存在 printit(( 方法的本地堆栈空间中(,以便该方法可以找到字符串。正如其他人指出的那样,指针是指字符串的第一个字母,该字母存储为字符数组。您不传递 int 指针的原因是,您传递了实际值,然后该值存储在本地堆栈上。

通过使用

printIt("hallo");

您正在将字符串文本"hello"的基址发送到printIt()函数,并且您在char* ptr中接受相同的内容。 ptr指向 "hallo" 的基址。没有因此分配单独的内存。

在同样的逻辑中,传递int并将其接收到int *是行不通的。你需要通过&<some int>.

注意:char * ptr变量本身在函数printIt()中具有局部作用域。

将字符串传递给函数时,指针变量 ptr 将指向 h,因为它是字符串的起始位置,它将打印 NULL 字符。将在 32 位系统中为 PTR 分配 4 个字节,因此它将获取字符串。