gpt4 book ai didi

c - 传递给函数的 const 指针是否复制地址并在函数范围内创建新指针?

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:48 25 4
gpt4 key购买 nike

我一直在编写一些接受 const char * 参数的函数,并在函数内部进行一些指针运算。例如,我编写了这个快速测试。

#include <stdio.h>

void move_ptr(const char *ptr)
{
printf("%p -> ", ptr);
ptr++;
printf("%p\n", ptr);
}

int main()
{
char *str = "hello?";
printf("unmoved pointer -> \"%s\"\n", str);
move_ptr(str);
printf("moved pointer -> \"%s\"\n", str);
}

输出是:

unmoved pointer -> "hello?"
0x4007b7 -> 0x4007b8
moved pointer -> "hello?"

这是否意味着所有传递给函数的 const TYPE * 都是函数作用域中传递地址的副本?

最佳答案

这比您想象的要简单。在 C 语言中,指针只是标量整数(通常是 32 或 64 位),恰好代表内存地址。当您将指针传递给函数时,您传递的是它的副本,就像任何其他值参数一样。当您更改该值时,调用函数不会看到该更改,就像任何其他值参数一样。

函数参数上的 const 关键字与此属性无关,表示指针指向的值在函数中不会改变。 p>

关于c - 传递给函数的 const 指针是否复制地址并在函数范围内创建新指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24500405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com