是否为函数调用中作为实际参数给出的字符数组分配内存
Is memory allocated for a character array given as actual parameter in a function call?
我只想知道在函数调用期间作为实际参数给出的字符数组是否存储在某个内存中。前任:
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 个字节,因此它将获取字符串。
相关文章:
- 将超出范围的整数分配给有符号字符类型
- 关于字符数组,我正在尝试将数组中的每个字符分配给另一个值
- 使用动态分配将 char* 复制到另一个字符**
- 将字符逐个分配给指针?
- C++ - 使用基于范围的 for 循环将字符值分配给向量中的字符串不会分配值
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 动态分配字符数组的内存
- C++具有动态分配的字符数组的结构
- 如何在C++中有效地将数字值重新分配给字符数组
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 将常量字符* 分配给字符*
- 为无符号字符* 分配一个数字
- C++错误字符分配
- C++中的模板方法,用于将 wchar_t* 或字符* 分配给数组
- 为什么C++允许我将常量字符分配给常量字符 *?
- 如何为以下字符分配数字 "@" 或 "#" 或 "^" 和 "*"
- 将 const 无符号字符* 分配给执行就地替换或省略的 std::string
- 为什么可以将常量字符*分配给字符*
- 在C++上将字符分配给多维字符数组时发生逻辑错误
- 如何使用无符号字符分配 #define