2012-02-23 5 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

잘 모르겠습니다. 어느 부분을 이해하지 못합니까? –

+0

@OliCharlesworth : 인쇄물이 왜 인쇄되는 것과 일치하지 않는지 이해하지 못합니다. 응답 포인터 : (nil), 예상 : 0x7fffde9aec80 응답 자체 : (null), expected : Yadda' – ArjunShankar

답변

2

get_response(...)에서 *response = request; 대신 response = &request;합니다. 당신은 그것을 저장하고 싶습니다. response포인트는입니다.

*response = request; 
+0

OP가 '오해'에 대한 설명입니다. 즉 인수가 가리키는 위치를 변경하는 대신 인수의 값을 변경합니다. – ArjunShankar

0

*response = request을보십시오 : 당신이 요청 내용에 응답 포인터의 내용을 설정합니다.

0

당신은 당신은 임시 변수 responserequest의 주소를 저장하는 기능 get_response

0

첫째, currect 선언과 get_response의 사용량과 매개 변수 response는, 예를 들어 char*에 대한 포인터입니다 char**,로 선언 포인터에 대한 포인터. 포인터가 실제로 response이 들어있는 메모리를 가리 키도록 수정해야하는 경우 유용하지만이 경우에는 필요하지 않습니다.

관련 문제