함수 매개 변수는 로컬 변수입니다. 원래 변수 name1
함수에서 변경되지 않았습니다 볼 수 있듯이
당신은 함수 호출과 그 정의를 다음과 같은 방법
char *name1 = "test_name";
switch_name(name1);
//...
void switch_name(/* char* name */)
{
char *name = name1;
name= "testv2";
}
을 상상할 수있다. 함수에서 변경된 변수 인 변수 name
입니다.
함수에서 변수를 변경하려면 참조로 원래 변수를 전달해야합니다. 예를
#include <stdio.h>
void switch_name(char ** name)
{
*name= "testv2";
}
int main(void)
{
char *name1 = "test_name";
printf("%s\n", name1);
switch_name(&name1);
printf("%s\n", name1);
}
를 들어
는 다음 프로그램 첫 번째 프로그램에서
#include <stdio.h>
#include <string.h>
void switch_name(char* name)
{
strcpy(name, "testv2");
}
int main(void)
{
char s[] = "test_name";
char *name1 = s;
printf("%s\n", name1);
switch_name(name1);
printf("%s\n", name1);
return 0;
}
당신이 기능을 사용하여 원래 포인터 자체를 재 할당 할 예정으로 위의 프로그램을 비교.
두 번째 프로그램에서는 표준 C 함수 strcpy
을 사용하여 포인터가 가리키는 데이터를 다시 할당합니다.
는
int main(void)
판독 추천 같은 C 표준에 따라 파라미터없이 기능
main
선언되어야한다고 고려 : 값에 의해 전달 대 기준에 의해 전달 차이는 무엇인가? (HTTPS//stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value) –"내 코드가 작동하지 않는 이유 -> 코드가 작동합니다." 코드는 내가 원하는 것을하지 않습니다. "-> 코드에서 무엇을 원했습니까? – chux