포인터 - 주소 값의 저장을 목적으로 선언되는 포인터 변수
메모리의 주소 값을 저장하기 위한 변수이다.
모든 자료형은 type에 대한 포인트를 가진다.(4byte 고정)
포인터 변수의 선언
int * pnum1; - int *는 int형 변수를 가리키는 pnum1의 선언을 의미.
double * pnum2; - double *는 double형 변수를 가리키는 pnum2의 선언을 의미.
unsigned int * pnum3;
- unsigned int *는 unsigned int형 변수를
가리키는 pnum3의 선언을 의미.
변수의 주소 값을 반환하는 & 연산자
& 연산자의 피연산자는 변수이어야 하며, 상수는 피연산자가 될 수 없다. 변수의 자료형에 맞지 않는 포인터 변수의 선언은 문제가 될 수 있다.
ex)
int main()
{
int num1 = 5;
double * pnum = &num1; //일치하지 않음
}
int형 변수의 주소 값을 double형 포인터 변수에 저장하거나 double형 변수의 주소 값을 int형 포인터 변수에 저장하는 것은 잘못된 것이다. 비록 컴파일 에러는 발생하지 않지만 워닝이 뜬다.
포인터가 가리키는 메로리를 참조하는 *연산자.
ex)
int main()
{
int num=10;
int * pnum=# //포인터 변수 pnum이 변수 num을 가리키게 하는 문장
*pnum=20; //pnum이 가리키는 변수에 20을 저장
printf("%d", *pnum); //pnum이 가리키는 변수의 주소에 있는 값을
// 부호 있는 정수로 출력.
}
(예제1)
main1
Intel 뒤에서부터 들어가기 때문에 산술은 빠르지만 대소비교는 느리다. -Little endian
12 | 34 | 56 | 78 |
78 | 56 | 34 | 12 |
super 앞에서부터 들어가기 때문에 산술은 느리지만
대소비교(논리연산)는 빠르다. - Big endian
12 | 34 | 56 | 78 |
12 | 34 | 56 | 78 |
int main()
{
int iNum = 0x12345678;
unsigned char *p =
(unsigned char *)&iNum;
*p = 0xAA;
return 0;
}
unsigned 선언 시 FFFF..사라짐 양의 정수라서.
(예제1)
(문제1)
(문제2)
(예제2)
char형 1byte 한 칸씩 이동 short형 2byte 두 칸씩 이동
(예제3)
char형 1byte 한 칸씩 이동
'c언어' 카테고리의 다른 글
20140324 - 전역변수,static지역변수,재귀함수,배열 (0) | 2014.03.24 |
---|---|
20140321 - 함수와 지역변수 (0) | 2014.03.22 |
20140318 - 포인터 (0) | 2014.03.18 |
20140317-제어문(break, continue, switch) (0) | 2014.03.17 |
20140314-제어문(반복문,분기문) (0) | 2014.03.14 |