scanf함수에 &를 붙이는 이유
Programming/C 2013. 2. 15. 00:57 |& = &특수문자는 주소값을 나타내 준다. &a 이렇게 붙이면 변수 a의 주소값을 나타내준다.
#include<stdio.h>
main()
{
int val; //main함수의 지역변수 val
scanf("%d", &val); //scanf함수는 지역변수 val에 접근해서 값을 대입함.
return 0;
}
# main함수 내에서 int a를 선언해 놓고 아무곳이나 가서 a = 5 이렇게 선언해서 a를 초기화 시킬 수 있다.
이것이 가능한 것은 main함수 내에서 존재하는 변수이기 때문이다.
하지만, scanf함수는 main함수와는 별개다. scanf 함수는 인자로 main함수 내에 존재하는 지역변수를
인자로 전달한다.
그런데.. 여기서 scanf함수는 main함수와는 별개이기 때문에 main함수내에 존재하는 변수의 위치를 모른다.
그렇기 때문에 main의 지역함수 앞에 &를 붙여서 주소를 알려주는 것이다.
우리집은 여기다. 이러면 어느 누가 우리집을 알까.? 주소를 알려주는 것이다. 주소를 보고 찾아오라고~
Call - By - Reference
------------------------------------------------------------------------------------------------------
#include<stdio.h>
main()
{
char arr[100]; //main함수의 지역변수) 문자형 데이타를 100개 저장할 수있는 arr배열
scanf("%d", arr); //scanf함수는 지역변수) arr에 접근해서 값을 대입함.
return 0;
}
# 음... 배열은 scanf함수에 &를 안붙인다. 왜냐면 배열의 이름은 주소를 지니고 있기 때문이다.
그래서 &를 붙일 필요가 없다.
'Programming > C' 카테고리의 다른 글
문자열을 추가하는 strcat과 strncat 함수 (0) | 2013.02.15 |
---|---|
문자열을 복사하는 strcpy, strncpy함수 (0) | 2013.02.15 |
2진수를 8진수로 16진수로, 8진수를 16진수로 (0) | 2013.02.15 |
2진수 음수 계산법 (0) | 2013.02.15 |
파일의 분할. (0) | 2013.02.14 |