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

C 传递给函数的常量指针是否复制地址并在函数范围内创建新指针?,c,pointers,constants,C,Pointers,Constants,我一直在编写一些函数,包括acceptconstchar*参数,在函数中我做了一些指针算术。例如,我编写了这个快速测试 #include <stdio.h> void move_ptr(const char *ptr) { printf("%p -> ", ptr); ptr++; printf("%p\n", ptr); } int main() { char *str = "hello?"; printf("unmoved poi

我一直在编写一些函数,包括accept
constchar*
参数,在函数中我做了一些指针算术。例如,我编写了这个快速测试

#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);
}

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

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


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

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


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

Yes。这与
const
无关。所有参数在C中都作为副本传递。这与
const
无关。所有参数都作为副本在C中传递。
unmoved pointer -> "hello?"
0x4007b7 -> 0x4007b8
moved pointer -> "hello?"