2012-10-22 3 views
0

나는 발견하고이 방법 understoof :포인터를 함수 선언에서 매개 변수로 선언하는 3 가지 방법은 무엇입니까?

void PrintString(char *String_Ptr) 
{ 
    //Print String 
} 

나는 함수 선언에서 매개 변수로 포인터를 선언하는 다른 방법을 찾을 수 없습니다.

나는 숙제 질문에서 같은 것을하는 다른 방법이 있다고 믿게되었다.

+0

'const'입니다. – chris

+1

@theIrishUser : 더 이상 사용되지 않는 태그는 잘못된 질문을 쓰지 않아도됩니다. 귀하의 게시물에 약간의 노력을하십시오. 왜 다른 방법, 자신을 시도했는지, 멈춘 곳 등을 믿는 지 설명하십시오. 문제에 대해 구체적으로 설명하십시오. –

+0

@theIrishUser, 예, 대부분의 숙제 문제는 이제 너무 지역화 된 것으로 분류됩니다. 문제가 발생하여 특정 요소로 옮겨 쓰면 때때로 적절하고 재사용 가능한 질문으로 바뀔 수 있습니다. 참고로 http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated – chris

답변

1

질문에 언급 된 것 외에도 몇 가지 가능성이 있습니다.

위의 구문은 String_Ptr이 배열임을 암시하는 구문에도 불구하고 질문의 버전과 정확히 같습니다. 당신은 당신이 PrintString()에 전달하려는 문자 (10 개 문자, 말)의 배열의 길이를 알고 있다면, 당신은 또한 배열에 대한 포인터를 전달할 수 있습니다

void PrintString(char String_Ptr[]) 
{ 
    printf("%s\n", String_Ptr); 
} 

: 그것은 포인터이다, 아니다

void PrintArray10(char (*Array_Ptr)[10]) 
{ 
    printf("%s\n", *Array_Ptr); // assuming the array is '\0'-terminated 
} 

int main(void) 
{ 
    char a[10] = "Blah!"; 
    PrintString(a); // first 2 methods 
    PrintArray10(&a); // 3rd method 
    return 0; 
} 

또한 typedef로 포인터를 위장 할 수 있습니다 : 나는 트릭을 추측하고있어

typedef char* pchar; 

void PrintString(pchar String_Ptr) 
{ 
    printf("%s\n", String_Ptr); 
} 

typedef char (*pchararr10)[10]; 

void PrintArray10(pchararr10 Array_Ptr) 
{ 
    printf("%s\n", *Array_Ptr); // assuming the array is '\0'-terminated 
} 
+1

'PrintArray10'의 인자는 원래의 질문 ('T * char [10]'과 함께'T *')과 같은 형식입니다. 그래서 지금까지 단지 하나의 대안입니다 ... –

+0

저는 ' 나는 이것이 대학 일과 관련이 있지만 숙제가 아니라는 것을 말하고 싶다. 나는이 질문을하지 말고, 나의 이해 포인터와 함수를 개발하려고 노력하고있다. 도움을 주셔서 감사합니다 – theIrishUser

+0

@KerrekSB 인자의 타입은'PrintArray10()'과'PrintString()'에서 다릅니다.'char (*) [10]'은'char *'와 같지 않습니다. 두 개는 다른 방식으로 참조 해제되며 두 개에서 포인터 연산이 다릅니다. 그들에 1을 추가하면 다른 포인터 유형뿐만 아니라 다른 포인터 값도 생성됩니다. –

관련 문제