은 내가 C는 항상 값에 의해 통과 알고,하지만 난 포인터가있는 경우 : 포인터를 함수에 전달하고 C에 지정된 변수에 값을 할당하는 방법은 무엇입니까?
int i = 4;
int * p;
p = &i;
다음 나는 기능이를 어떻게 변수
i
의 값을 여기에 포인터
p
을 통과 변경?
void changeValue(int *p)
{
}
포인터를 전달하고 변수가 가리키는 변수를 변경하는 방법은 p
입니까?
은 내가 C는 항상 값에 의해 통과 알고,하지만 난 포인터가있는 경우 : 포인터를 함수에 전달하고 C에 지정된 변수에 값을 할당하는 방법은 무엇입니까?
int i = 4;
int * p;
p = &i;
다음 나는 기능이를 어떻게 변수
i
의 값을 여기에 포인터
p
을 통과 변경?
void changeValue(int *p)
{
}
포인터를 전달하고 변수가 가리키는 변수를 변경하는 방법은 p
입니까?
이 간단한 예에서는 포인터 (즉 아닌 값)을 통과하여 그 포인터를 정수로 유지되는 새로운 값을 다시받을하는 방법을 보여준다. 감소 된 변수의 수에 유의하십시오. 즉, 반드시 int *p;
의 별도 사본을 작성할 필요는 없습니다. 이 경우 i의 주소에 p : p = &i;
을 초기화 할 필요도 없습니다.
int changeValue(int *);
int main(void)
{
int i=15;
changeValue(&i);
return 0;
}
int changeValue(int *p) //prototyped to accept int *
{
return *p = 3;
}
그런 다음, 그 포인터를 첫번째 장소에있는 포인터를 생성하고 전달하려는 경우 : I know the c always pass by values
올바르지 않습니다 :
int changeValue(int *);
int main(void)
{
int i=15;
int *p;
p = &i;
*p; // *p == 15 at this point
//since p is already a pointer, just pass
//it as is
changeValue(p);
return 0;
}
int changeValue(int *q) //prototyped to accept int *
{
return *q = 3;
}
당신의 문이 점에 유의하는 것이 중요하다. 특히 큰 배열이나 구조체가 사용되는 경우 포인터가 더 작고 실제 변수보다 쉽게 전달되기 때문에 포인터가 전달되도록 함수를 작성하는 것이 일반적입니다. &i
(i의 주소)을 전달하는 것은 포인터를 전달해야하는 경우 p
을 전달하는 것과 마찬가지로 작동합니다.
int i = 4;
int * p = &i;
changeValue(p);
printf("%d",*p);
void changeValue(int *p)
{
*p = 5;
}
전체 프로그램 - 간단하게 http://ideone.com/DCvhxE
답변에 링크 된 짧은 (올바른) 예제 코드를 삽입하는 것이 어떻습니까? 답은'changeValue()'프로토 타입을 그리는 데 실패하므로 정확하지 않습니다. – alk
는 changeValue
changeValue(p);
를 호출하여 전달하고 *p
changeValue()
에에 값을 할당하여 (i
)가 가리키는 변수의 값을 변경
void changeValue(int *p)
{
*p = an int value;
}
포인터를 changeValue
에서 역 참조하고 할당하면 호출하는 프레임의 i
값이 변경됩니다.
는 예컨대 :
void changeValue(int *p)
{
*p = 0;
}
void changeValue(int*) ;
int main(void)
{
int i = 4; // Suppose i is stored at address 1000h
int * p;
p = &i; // Now p stores the address of i that is 1000h
changeValue(p); // Can also be written as changeValue(&i);
// Here you are passing the address of i to changeValue function
return 0 ;
}
void changeValue(int* p) // Accept a parameter of type int*
{
*p = 100 ; // store the value 100 at address 1000h
return ;
}
코드가'changeValue()'프로토 타입을 그리는 데 실패했습니다. – alk
함수의 첫 번째 모양 _in C_가 특정 리턴 유형으로 먼저 정의되지 않은 경우, 즉 리턴 유형이 모호한 경우 컴파일러가 int를 리턴한다고 가정하면 아마도 좋다. 처음으로'changeValue (p); '가 main에 나타나기 때문에 모호하기 때문에 컴파일러는'int'라고 가정합니다. 그런 다음 함수 정의에서'void changeValue (int *)'로 정의됩니다.결과적으로 _create_compile 시간 오류 _redeclaration이 발생합니다. 프로토 타입'void changeValue (int *);를'main()'의 어딘가에 추가하면 코드가 완벽합니다. (나는 downvoter가 아니지만 upvote 고정 된 경우) – ryyker
@alk :: 내 실수. 나는 어리석은 곳에서 이것을 대답했다. – Abhineet
"나는 항상 값으로 전달합니다."어떻게 알 수 있습니까? – Abhineet
어딘가에 그것을 읽어라. – user2131316
그 선배에게 고마워. 나는 그것을 몰랐다. 나는 경험상 모든 것이 복사된다는 것을 알고 포인터의 값을 알았지 만 결코 두 번째 생각을하지는 못했다. – Abhineet