728x90
배열의 이름은 포인터이다.
int형 배열의 주소값 차는 4바이트이며, 주소값의 변경은 불가능하다. (값을 바꿀 수 없는 상수형)
포인터 변수와 배열의 이름 모두, 메모리의 주소값을 나타내고 저장한다.
#include <stdio.h>
int main()
{
int arr[3] = { 0, 1, 2 };
printf("배열의 이름: %p \n", arr);
printf("첫번째 요소: %p \n", &arr[0]);
printf("두번째 요소: %p \n", &arr[1]);
printf("세번째 요소: %p \n", &arr[2]);
// arr = &arr[i]; // 이 문장은 컴파일 에러를 일으킨다.
return 0;
}
|
#include <stdio.h>
int main()
{
char *cpStr="hello world \n";
char caStr[20];
printf("Hello world \n");
printf(cpStr);
caStr[0]='h';
caStr[1]='e';
caStr[2]='l';
caStr[3]='l';
caStr[4]='0';
printf(caStr);
putchar('\n');
return 0;
} |
castr의 배열에 저장된값 출력 배열의 경우 마지막에 null을 넣지 않으면 특수문자 \0 이 자동으로 붙음 그래서 castr[4]는 0을 넣음
임베디드
7F 45 4C // ELF파일임을 나타내는 아스키 코드
#include <stdio.h>
int main(void)
{
char str1[] = "My String";
char *str2 = "Your String";
printf("%s %s \n", str1, str2);
printf("str1 address : %p \n", str1);
printf("main address", main);
printf("str address", str2);
printf("str2 address : %p \n", str2);
str2 = "Our String";
printf("%s %s \n", str1, str2);
str1[0] = 'X';
//str2[0] = 'X';
printf("%s %s \n", str1, str2);
return 0;
} |
단순하게 화면을 출력할꺼면 포인터를 쓰는 것이 좋다. // char *str2 = "";
위의 예제에서 포인터는 stack 영역에서 4byte를 차지하고 문자열은 10바이트를 차지한다. (M/y/_/S/t/r/i/n/g/null)
문자를 수정하려면 문자열을 쓴다. // char str1[] = "";
메모리의 code영역은 Read only라 쓰면 안됨. (위의 소스에서 18행을 주석처리한 이유)
도스에서 허용하지만 리눅스에선 안되며 원래 쓰지 않는 것이 맞다.
포인터를 활용한 printf문
#include <stdio.h>
int main(void)
{
char *cpStr = "A=%d \n";
int A = 100;
printf(cpStr, A);
return 0;
}
|
A=100 |
'Study > C' 카테고리의 다른 글
2016-04-07-업무일지_구조체 및 함수 (0) | 2016.04.07 |
---|---|
2016-04-06-업무일지_포인터 및 함수 (0) | 2016.04.06 |
20160401_전역변수와 포인터 (0) | 2016.04.04 |
20160329_C기초, 디버깅 (0) | 2016.03.29 |
20160308_업무일지_그 밖의 기초 학습 (0) | 2016.03.08 |