2012-02-23 245 views
4

我对传递指向char数组的指针有什么误解?将指向C数组的指针传递给函数

 
Request pointer in fun: 0x7fffde9aec80 
Response pointer in fun: 0x7fffde9aec80 
Response pointer: (nil), expected: 0x7fffde9aec80 
Response itself: (null), expected: 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

我不知道。你不明白哪一部分? – 2012-02-23 14:12:38

+0

@OliCharlesworth:他不明白为什么打印的内容与他期望的内容不匹配: '响应指针:(无),预期:0x7fffde9aec80 响应本身:(null),预计:Yadda' – ArjunShankar 2012-02-23 14:18:51

回答

2

在功能get_response你的request地址存储在临时变量response。你想把它存在哪里response到。

*response = request; 
+0

+1用于解释OP是什么“误解”。即改变参数的值而不是改变参数指向的位置。 – ArjunShankar 2012-02-23 14:16:58

0

尝试*response = request:要响应指针的内容设置为请求的内容。

0

你想*response = request;而不是response = &request;get_response(...)

0

首先,与当期的声明和您的get_response用法,参数response被声明为char**,这是一个指向char*,例如一个指向指针的指针。如果您不知何故需要修改实际指向包含您的response的内存的指针,这将非常有用,但在这种情况下,这不是必需的。