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

时间:2014-06-30 23:29:15

标签: c pointers const

我一直在写一些函数接受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 *都是函数作用域中传递地址的副本?

1 个答案:

答案 0 :(得分:4)

这比你想要的更简单。在C中,指针只是标量整数(通常为32或64位),发生表示内存地址。当您将指针传递给函数时,您将传递它的副本,就像使用任何其他值参数一样。当你改变那个值时,调用函数看不到 ,就像任何其他值参数一样。

函数参数上的const关键字与此属性无关,并且表示指针中指定的值将不会在函数中更改。