gpt4 book ai didi

c - 指针是 "passed by value"?

转载 作者:行者123 更新时间:2023-12-05 09:26:42 25 4
gpt4 key购买 nike

ptr 上调用 f() 后,我希望它指向值为 A 的单个字节。但是 ptr 是按值复制的,它只在 f 函数中可用(?)我做错了什么?

void f(char* ptr) {
ptr = (char*) malloc(1);
*ptr = 'A';
}

int main() {
char* ptr;
f(ptr);
printf("%c\n", *ptr); // Segmentation fault, But it should be 'A'
// free(ptr);
}

谢谢!

最佳答案

是的,它是按值传递的。如果您希望对指针所做的更改在调用站点可见,则需要将指针传递给指针。

例子:

#include <stdlib.h>
#include <stdio.h>

void f(char **ptr) { // pointer to the pointer
*ptr = malloc(1);
if(*ptr) // precaution if malloc should fail
**ptr = 'A';
}

int main(void) {
char *ptr;
f(&ptr); // take the address of `ptr`
if(ptr) // precaution again
printf("%c\n", *ptr); // now fine
free(ptr); // without this, you have a memory leak
}

关于c - 指针是 "passed by value"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73450479/

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