Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- web
- DP
- 백준
- dfs
- 인프런
- Math
- BFS
- C언어
- 따라하면서 배우는 C언어
- BASIC
- graph
- programmers
- Algospot
- Cleancode
- 따라하며 배우는 C언어
- C
- php
- udemy
- 따배씨
- JavaScript
- sorting
- Algorithm
- server
- 생활코딩
- greedy
- 종만북
- Python
- BOJ
- String
- 정수론
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 11.3 문자열의 배열 본문
따배씨 - 따라하며 배우는 C언어
11강 문자열 함수들
11.3 문자열의 배열
#include <stdio.h>
int main(){
const char* mythings[5] = {
"Dancing in the rain",
"Couting apples",
"Watching movies with friends",
"Writing sad letters",
"Studying the C language"
};
char yourthings[5][40] = {
"Studying the C++ language",
"Eating",
"Watching Netflix",
"Walking around till dark",
"Deleting spam emails"
};
const char* temp1 = "Dancing in the rain";
const char* temp2 = "Studying the C++ language";
printf("%s %u %u\n", mythings[0], (unsigned)mythings[0], (unsigned)temp1);
// Dancing in the rain 15956 15956
printf("%s %u %u\n", yourthings[0], (unsigned)yourthings[0], (unsigned)temp2);
// Studying the C++ language 4022334272 16064
return 0;
}
printf("%s %u %u\n", mythings[0], (unsigned)mythings[0], (unsigned)temp1);
// Dancing in the rain 15956 15956
- mythings 와 temp1 은 선언할때 pointer 로 선언
- Compiler 가 같은 내용임을 인지하여 한번만 저장 하고 주소값으로 연결
printf("%s %u %u\n", yourthings[0], (unsigned)yourthings[0], (unsigned)temp2);
// Studying the C++ language 4022334272 16064
- yourthings 는 배열로 선언, Stack 에 배열로 메모리 공간을 할당
- "Studying the C++ language" 는 별도 메모리에 복사해서 들어가는 형태
- 같은 String 이지만, 배열로 선언하였기 때문에 temp2 와 같은 주소가 아니다
#include <stdio.h>
int main(){
const char* mythings[5] = {
"Dancing in the rain",
"Couting apples",
"Watching movies with friends",
"Writing sad letters",
"Studying the C language"
};
char yourthings[5][40] = {
"Studying the C++ language",
"Eating",
"Watching Netflix",
"Walking around till dark",
"Deleting spam emails"
};
printf("%-30s %-30s\n", "My Things:", "Your Thins:");
for (int i = 0; i < 5; ++i){
printf("%-30s %30s\n", mythings[i], yourthings[i]);
}
return 0;
}
- %-30s, 줄맞추기 옵션
#include <stdio.h>
int main(){
const char* mythings[5] = {
"Dancing in the rain",
"Couting apples",
"Watching movies with friends",
"Writing sad letters",
"Studying the C language"
};
char yourthings[5][40] = {
"Studying the C++ language",
"Eating",
"Watching Netflix",
"Walking around till dark",
"Deleting spam emails"
};
printf("\nsizeof mythings: %zd, sizeof your yourthings: %zd\n", sizeof(mythings), sizeof(yourthings));
// sizeof mythings: 40, sizeof your yourthings: 200
return 0;
}
const char* mythings[5]
- char type 포인터 5개를 원소로 갖는 Array
- size == 40 byte, 8 byte * 5 = 40 byte
printf("%zd\n", sizeof(char*));
// 8
char yourthings[5][40]
- 40글자가 저장되는 String 5개를 원소로 갖는 Array
- size == 200 byte, 40 byte * 5 = 200 byte
- String 을 pointer 로 사용하면, 같은 내용을 여러번 사용시 하나의 메모리를 중복으로 사용하기 때문에 메모리 공간을 아낄수 있음
- 단, 메모리에 직접 접근하는 방식이므로 값을 변경하면 안됨.
- const 로 선언하자
#include <stdio.h>
int main(){
const char* mythings[5] = {
"Dancing in the rain",
"Couting apples",
"Watching movies with friends",
"Writing sad letters",
"Studying the C language"
};
char yourthings[5][40] = {
"Studying the C++ language",
"Eating",
"Watching Netflix",
"Walking around till dark",
"Deleting spam emails"
};
for (int i = 0; i < 100; ++i){
printf("%c", mythings[0][i]);
}
// Dancing in the rain Couting apples Watching movies with friends Writing sad letters Studying the C l
printf("\n\n");
for (int i = 0; i < 200; ++i){
printf("%d", (int)yourthings[0][i]);
}
// 831161171001211051101033211610410132674343321089711010311797103101000000000000000699711610511010300000000000000000000000000000000008797116991041051101033278101116102108105120000000000000000000000000879710810710511010332971141111171101003211610510810832100971141070000000000000000681011081011161051101033211511297109321011099710510811500000000000000000000
printf("\n\n");
for (int i = 0; i < 200; ++i){
printf("%c", yourthings[0][i]);
}
// Studying the C++ language''''''''''Eating''''''''''''''''''''''''''''''''''Watching Netflix''''''''''''Walking around till dark''''''''''Deleting spam emails''''''''''''''''''''''
printf("\n\n");
return 0;
}
- 주소값을 이용하여 출력, 권장하지 않는 방법
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 11.5 문자열을 출력하는 다양한 방법들 (0) | 2021.06.09 |
---|---|
[따배씨] 11.4 문자열을 입력받는 다양한 방법들 (0) | 2021.06.09 |
[따배씨] 11.2 메모리 레이아웃과 문자열 (0) | 2021.06.09 |
[따배씨] 11.1 문자열을 정의하는 방법들 (0) | 2021.06.09 |
[따배씨] 10.18 복합 리터럴과 배열 (0) | 2021.06.08 |
Comments