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 |
728x90
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
2016-04-06-조재찬_업무일지_포인터 및 함수 (0) | 2016.04.15 |
---|---|
2016-04-14_조재찬_업무일지_네트워크:소켓 (0) | 2016.04.15 |
20160405-업무일지-허도경-로봇제어-시리얼제어 (0) | 2016.04.14 |
비주얼 스튜디오 패키지 오류 삽질기... (0) | 2016.04.13 |
20160411_장진웅_업무일지_구조체로 도서관 프로그래밍 (1) | 2016.04.11 |
20160408_장진웅_업무일지_공장내 Network_네트워크 기초 (0) | 2016.04.11 |
20160407_장진웅_업무일지_로봇제어_시리얼제어4 (0) | 2016.04.11 |
20160406_김도관_업무일지_C언어기초_02 (0) | 2016.04.11 |