2012-01-18 2 views
49

필자에게 익숙하지 않은 함수 선언을 가진 대부분의 C 프로그램에서 나는 혼란 스러웠습니다.함수 이름 앞에 별표 (asterisk)의 기능은 무엇입니까?

void *func_name(void *param){ 
    ... 
} 

*은 무엇을 의미합니까? 변수 유형의 (*)에 대한 나의 이해는 다른 변수에 대한 포인터를 작성하므로 후자 변수가 메모리에 저장된 주소를 추적 할 수 있다는 것입니다. 그러나이 함수의 경우, 별표가 의미하는 바는 무엇인지 모른다. *.

+4

코드를 작성한 사람에게'void * func_name' 또는'void * func_name'보다는 별표를 함수의 이름 옆에 넣는 것이 매우 흥미로운 질문입니다. 그들이 합리적인 논쟁을 불러 일으킬 수 있다면, 나는 감동받을 것입니다. – Lundin

+8

합리적 인수 : "int * a"를 작성하는 데 익숙하기 때문에 함수에 대해 동일한 작업을 수행하는 것이 더 일관성이있는 것처럼 보입니다 – Guillaume

+1

Guillaume이 작성한 함수 이외에 void를 반환하는 포인터가 있습니다. 'int * a'와 마찬가지로 a가 integer-pointer 형이 아닌 정수를 가리키고 있습니다. – dhein

답변

58

별표 그것은 함수가 무효 포인터를 반환한다는 것을 의미 :

void* func_name(void *param) { . . . . . } 

, 함수 이름에 즉을 반환 형식에 속하는, 그리고.

+10

답장을 주셔서 감사합니다. 그러나 무효 포인터는 무엇을 의미합니까? ? – Aldee

+6

이것은 메모리에있는 위치의 주소입니다. 포인터가 가리키는 내용을 모를 경우 포인터를 나중에 사용할 수있는 적절한 형식으로 캐스팅해야합니다. 물론 잘못된 유형으로 캐스팅합니다 (예 : void *가 float를 가리키고 char로 캐스팅 한 경우) 정의되지 않은 결과가 생성됩니다. –

+1

@AldeeMativo : 또한 http://stackoverflow.com/questions/692564/concept-of-void-pointer-in-c-programming을 참조하십시오. – NPE

10

*은 반환 유형에 속합니다. 이 함수는 지정되지 않은 유형의 메모리 위치에 대한 포인터 인 void *을 반환합니다.

포인터는 값으로 메모리 위치의 주소를 가진 변수 유형입니다. C의 다른 포인터 유형은 포인터 변수가 참조하는 메모리 위치에 상주 할 것으로 예상되는 여러 유형을 나타냅니다. 따라서 int *int으로 해석 될 수있는 위치를 나타낼 것으로 예상됩니다. 그러나 void *은 지정되지 않은 유형의 메모리 위치를 참조하는 포인터 유형입니다. 참조하는 메모리 위치의 데이터에 액세스하려면 void 포인터를 형 변환해야합니다.

5

즉,이 함수는 void*을 반환합니다.

+1

즉, 함수가 제네릭 포인터를 반환합니다. –

16

*는 함수의 반환 형식을 나타내며 void *입니다. 당신이 원한다면 때문에

int *a; 
int* a; 

내가 개인적으로 첫 번째 선택이 더 명확 고려 : 당신은 포인터 변수를 선언 할 때

, 변수 이름으로 * 가깝거나 변수 유형을 넣어 같은 일이다 , 구분 기호를 사용하여 정의 여러 포인터, 당신은 * 때마다 반복해야합니다 : (가) "가까운 구문을 입력하려면"이 경우 오해의 소지가 될 수 있습니다 사용

int *a, *b; 

을 당신이 만약 때문에 쓰기 : 당신은 int로 포인터 (a)와 INT (b)를 선언하는

int* a, b; 

.

그래서 함수의 구문도 유형을 반환합니다.

+0

예. 나는 또한 그렇게 생각한다. 덕분에 @ puller .. – Aldee

+3

"연산자를 사용하여 여러 포인터를 정의하려는 경우". 포인터와 동일한 유형의 변수를 결합 할 때 버그가 발생하기 때문에 프로그래밍 스타일이 좋지 않습니다. 해결책은 포인터를 선언하는 방식을 혼란스럽게하는 것이 아니라 솔루션 자체의 모든 변수를 선언하는 것입니다. 동일한 행에 여러 변수를 선언하는 것이 타당하지 않은 경우는 존재하지 않습니다. 키보드 프레스를 제외하고 무엇을하고 있습니까? 분명히, 키보드의 마모는 코드의 가독성보다 더 심각한 문제입니다. – Lundin

+1

나는 그렇게 말한 적이 없습니다. 나는 이것이 "변수에 가까운 이름"구문을 선호하는 이유라고 혼동을 일으키지 않으므로 말했다. 그리고 그것은 함수 인터페이스에서 사용 된 구문과 동일한 구문에 대한 가능한 설명이라고 말했습니다. –

관련 문제