C 传递给函数的常量指针是否复制地址并在函数范围内创建新指针?
我一直在编写一些函数,包括acceptC 传递给函数的常量指针是否复制地址并在函数范围内创建新指针?,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
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?"