将指向C数组的指针传递给函数

5

我对传递指向字符数组的指针有什么误解吗?

fun中请求指针: 0x7fffde9aec80
fun中响应指针: 0x7fffde9aec80
响应指针:(空),预期值为:0x7fffde9aec80
响应本身:(空),预期值为:Yadda
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int get_response(char *request, char **response) {
    response = &request;
    printf("Request pointer in fun: %p\n", request);
    printf("Response pointer in fun: %p\n", *response);
    return 0;
}

int main() {
    char *response = NULL, request[] = "Yadda";

    get_response(request, &response);

    printf("Response pointer: %p, expected: %p\n", response, request);
    printf("Response itself: %s, expected: %s\n", response, request);

    return 0;
}

3
我不知道。你不明白哪一部分? - Oliver Charlesworth
@OliCharlesworth:他不明白为什么打印出来的内容与他“期望”的内容不一致:响应指针:(nil),期望值:0x7fffde9aec80 响应本身:(null),期望值:Yadda - ArjunShankar
4个回答

2
在函数get_response中,您将request的地址存储在临时变量response中。您希望将其存储在response指向的位置。
*response = request;

+1 是为了解释 OP 所“误解”的内容。即改变参数的值而不是改变参数所指向的位置。 - ArjunShankar

0
尝试使用*response = request:您想将响应指针的内容设置为请求内容。

0

get_response(...)中,你需要使用*response = request;而不是response = &request;


0
首先,通过当前的声明以及你对get_response的使用,参数response被声明为char**,它是一个指向char*的指针,例如指向指针。如果您需要修改指向包含response的内存的指针,则这将非常有用,但在这种情况下,这不是必需的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接