- ๐ฅ ๋ฌธ์์ด ๋ฐฐ์ด์ ๋ง์ง๋ง์
null๊ฐ๋ค์ด๊ฐ๋ค!!์ฌ์ด์ฆ ๊ณ์ฐ ์null๊ฐํฌํจํด์ฃผ์!
- ๐ฅ int : 4byte !!!!
- ๐ฅ char : 1byte !!!!
// ํฅ๋ฌ์ค ํ๋ก๊ทธ๋๋ฐ ํน๊ฐ c์ธ์ด 46๋ฒ
#include <stdio.h>
int main() {
char ch[5];
char str[] = "abcde";
int num[] = {1, 2, 3, 4, 5};
printf("%d, ", sizeof(ch));
printf("%d, ', sizeof(str));
printf("%d\n", sizeof(num)/sizeof(int));
return 0;
}
ํด์ค
- sizeof(str) : 6
char str[]: "abcde";
| a | b | c | d | e | \0 |
โจ ๋ฌธ์์ด ๋ฐฐ์ด์๋ _**๋ง์ง๋ง์ `null๋ฌธ์`๊ฐ ํฌํจ๋์ด**_ length๊ฐ 6
- sizeof(num)/sizeof(int) : 5
int num[] = | 1 | 2 | 3 | 4 | 5 |
sizeof(num) = 4byte*5 = 20byte
sizeof(int) = 4byte
์ ๋ต : 5, 6, 5
</div>
- printf ํจ์๊ฐ
%s๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์ถ๋ ฅํ ๋, ํจ์๋ ์ฃผ์ด์ง ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์์ ์์ํด์ null ๋ฌธ์๋ฅผ ๋ง๋ ๋๊น์ง ์ฐ์๋ ๋ฌธ์๋ค์ ์ถ๋ ฅํ๋ค.- printf ํจ์๊ฐ
%c๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ์ถ๋ ฅํ ๋, ํด๋น ์ฃผ์์ ๋จ์ผ ๋ฌธ์๋ง์ ์ถ๋ ฅํ๋ค.- ํฌ์ธํฐ p๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ด ์ซ์์ผ ๊ฒฝ์ฐ์๋ printf ํจ์์ ์ถ๋ ฅ ํ์ ์ ๋ฐ๋์ ํ์ธํ์!!!
%c์ผ ๊ฒฝ์ฐ ์์คํค ์ฝ๋๋ก ๋ณํํด์ฃผ๊ธฐ!!
// ํฅ๋ฌ์ค ํ๋ก๊ทธ๋๋ฐ ํน๊ฐ c์ธ์ด 54๋ฒ
#include <stdio.h>
int main(void){
int code = 65;
int *p = &code;
printf("%c", (*p)++);
return 0
}
ํฌ์ธํฐ p๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ (*p) : 65
%c : ๋จ์ผ ๋ฌธ์ ์ถ๋ ฅ. 65 โก A
๐ฅ๐ฅ ์๋ ๋๊ฐ ์ฐจ์ด ํ์ธํ๊ธฐ!!!!!!! ๐ฅ๐ฅ
- printf("%c\n",
*(p + 3));
โก ํฌ์ธํฐ p์์ 3์นธ ์ด๋ํ ์์น์ ๋ฌธ์ ์ถ๋ ฅ- printf("%c\n",
*p + 2);
โก ํฌ์ธํฐ p๊ฐ ๊ฐ๋ฆฌํค๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์์ ์์คํค ๊ฐ์ 2๋ฅผ ๋ํ ๊ฐ ์ถ๋ ฅ
// ํฅ๋ฌ์ค ํ๋ก๊ทธ๋๋ฐ ํน๊ฐ c์ธ์ด 56๋ฒ
#include <stdio.h>
int main(void) {
char *p = "KOREA";
printf("%s\n", p); // "KOREA" ๋ฌธ์์ด ์ ์ฒด๋ฅผ ์ถ๋ ฅ
printf("%s\n", p + 3); // ํฌ์ธํฐ p์์ 3์นธ ์ด๋ํ "EA" ๋ถ๋ถ๋ถํฐ ๋ฌธ์์ด์ ์ถ๋ ฅ
printf("%c\n", *p); // ํฌ์ธํฐ p๊ฐ ๊ฐ๋ฆฌํค๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์ 'K'๋ฅผ ์ถ๋ ฅ
printf("%c\n", *(p + 3)); // ํฌ์ธํฐ p์์ 3์นธ ์ด๋ํ ์์น์ ๋ฌธ์ 'E'๋ฅผ ์ถ๋ ฅ
printf("%c\n", *p + 2); // ํฌ์ธํฐ p๊ฐ ๊ฐ๋ฆฌํค๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์ 'K'์ ์์คํค ๊ฐ์ 2๋ฅผ ๋ํ ๊ฐ 'M'์ ์ถ๋ ฅ
return 0;
}
*p + 2๋ ํฌ์ธํฐ p์ ๊ฐ(*P=K) 'K'์ ์์คํค ์ฝ๋์ 2๋ฅผ ๋ํ ๊ฐ์ ํด๋นํ๋ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค. 'K'์ ์์คํค ์ฝ๋๋ 75์ด๋ฏ๋ก, ์ฌ๊ธฐ์ 2๋ฅผ ๋ํ๋ฉด 77์ด๊ณ , ์ด๋ 'M'์ ํด๋นํ๋ค. ๋ฐ๋ผ์ 'M'์ด ์ถ๋ ฅ๋จ!
K+2 = M
K (75) L (76) M (77)
์ฐธ๊ณ ) https://cafe.naver.com/sosozl/5281
a = *p++: a = p์ ๊ฐ ๊ฐ์ ธ์ด. ์ดํp= p+1(์ฃผ์+1)b = (*p)++: b = p์ ๊ฐ ๊ฐ์ ธ์ด. ์ดํ*p = *p+1(p์ ๊ฐ+1)*p++ = 10: p์ ๊ฐ์ 10 ๋ฃ๊ณ , ์ดํp=p+1(์ฃผ์+1)*p+=10:*p=*p+10*p++ += 10:*p=*p+10(p์ ๊ฐ+10) ์ดํp= p+1(์ฃผ์+1)
์ฌ์ฉ์๋ก๋ถํฐ ๋ฌธ์์ด ์
๋ ฅ๋ฐ์ ์ ์ฅํ ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ์ธ์๊ฐ์ผ๋ก ๋ฐ๋๋ค.
// ํ๊ธธ๋, ๊น์ฒ ์, ๋ฐ์ํฌ ์์ผ๋ก ์
๋ ฅ๋ฐ์๋ค๊ณ ๊ฐ์ ํ์ ๋ ์๋ ์ฝ๋์ ๊ฒฐ๊ณผ:
#include <stdio.h>
char n[30]; // ์ ์ญ ๋ฐฐ์ด n ์ ์ธ. ์ต๋ 29๊ฐ์ ๋ฌธ์์ ๋ ์ข
๋ฃ ๋ฌธ์('\0')๋ฅผ ์ ์ฅํ ์ ์์.
// getname(): ์ฌ์ฉ์๋ก๋ถํฐ ๋ฌธ์์ด์ ์
๋ ฅ๋ฐ์ n ๋ฐฐ์ด์ ์ ์ฅํ๊ณ , n์ ์ฃผ์๋ฅผ ๋ฐํํ๋ ํจ์
char* getname(){
gets(n); // ํ์ค ์
๋ ฅ์ผ๋ก๋ถํฐ ๋ฌธ์์ด์ ๋ฐ์ n์ ์ ์ฅ
return n; // n์ ์ฃผ์ ๋ฐํ
}
int main() {
char* n1 = getname(); // ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์ ์
๋ ฅ์ ๋ฐ์ n1์ด ๊ฐ๋ฆฌํด
char* n2 = getname(); // ๋ ๋ฒ์งธ ์ฌ์ฉ์ ์
๋ ฅ์ ๋ฐ์ n2๊ฐ ๊ฐ๋ฆฌํด
char* n3 = getname(); // ์ธ ๋ฒ์งธ ์ฌ์ฉ์ ์
๋ ฅ์ ๋ฐ์ n3์ด ๊ฐ๋ฆฌํด
// n1, n2, n3์ด ๋ชจ๋ ๊ฐ์ n ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก, ๋ง์ง๋ง์ผ๋ก ์
๋ ฅ๋ ๋ฌธ์์ด์ ์ถ๋ ฅํจ
printf("%s\n", n1);
printf("%s\n", n2);
printf("%s\n", n3);
return 0; // ํ๋ก๊ทธ๋จ ์ข
๋ฃ
}
n1, n2, n3 ๋ชจ๋ ๊ฐ์ ๋ฐฐ์ด n์ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
getname ํจ์ ํธ์ถ ์ n ๋ฐฐ์ด์ ์ ์ฅ๋ ๊ฐ์ ์๋ก์ด ์ ๋ ฅ์ผ๋ก ๋ฎ์ด์ฐ์ฌ์ง๋ค.
"ํ๊ธธ๋"์ ์ ๋ ฅํ ํ n1์ด ์ด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ , ๋ค์ "๊น์ฒ ์" ์ ๋ ฅ ์ n ๋ฐฐ์ด์ "ํ๊ธธ๋" ๋์ "๊น์ฒ ์"๊ฐ ์ ์ฅ๋๋ฉฐ n2๋ ์ด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค. ๋ง์ง๋ง์ผ๋ก "๋ฐ์ํฌ"๊ฐ ์ ๋ ฅ๋๋ฉด, "๊น์ฒ ์"๋ "๋ฐ์ํฌ"๋ก ๋ฎ์ด์ฐ์ฌ์ง๊ณ , n3 ์ญ์ "๋ฐ์ํฌ"๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
์ต์ข ์ ์ผ๋ก printf๋ก n1, n2, n3์ ์ถ๋ ฅํ ๋ ๋ชจ๋ ๋์ผํ n ๋ฐฐ์ด์ ๋ด์ฉ์ธ "๋ฐ์ํฌ"๋ฅผ ์ถ๋ ฅํ๋ค.
๋ต)
๋ฐ์ํฌ
๋ฐ์ํฌ
๋ฐ์ํฌ
strstr(pa, pb);// pa๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์์ pb๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์ ์ฐพ์strncpy(pd, "77", 3);// pd๊ฐ ๊ฐ๋ฆฌํค๋ ์์น๋ถํฐ 3๊ฐ ๋ฌธ์๋ฅผ "77"๋ก ๋ณต์ฌํจ. ์๋ ์ฝ๋์ ๊ฒฝ์ฐ "PP1"์ด "77"๋ก ๋ฐ๋
// ๋ฐฐ์ด์ ์์ ์ฃผ์๋ 100์ด๋ผ ๊ฐ์
#include <stdio.h>
#include <string.h>
int main() {
char list[] = "22QPP1"; // ๋ฌธ์์ด์ ์ด๊ธฐํ
const char *pa, *pb; // ํฌ์ธํฐ ๋ณ์๋ฅผ ์ ์ธ
char *pc, *pd; // ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํฌ์ธํฐ ๋ณ์๋ฅผ ์ ์ธ
pa = &list[1]; // 101๋ฒ์ง ๊ฐ๋ฆฌํด
list[2] = 'K'; // 102๋ฒ์ง ๊ฐ๋ฆฌํด
pb = &list[3]; // 103๋ฒ์ง ๊ฐ๋ฆฌํด
pc = list; // //100๋ฒ์ง ๊ฐ๋ฆฌํด
pd = strstr(pa, pb);
// pa(์ฃผ์ 101์์ ์์ํ๋ "2KPP1")๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์์
// pb(์ฃผ์ 103์์ ์์ํ๋ "PP1")๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์ ์์น๋ฅผ ์ฐพ์
printf("pd: %s\n", pd);
// pd(์ฃผ์ 103์์ ์์ํ๋ "PP1")๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์ ์ถ๋ ฅ
if (pd != 0) { // pd๊ฐ NULL์ด ์๋๋ผ๋ฉด (์ฆ, ๋ฌธ์์ด์ด ์ฐพ์์ก๋ค๋ฉด)
strncpy(pd, "77", 3); // pd๊ฐ ๊ฐ๋ฆฌํค๋ ์์น(์ฃผ์ 103)๋ถํฐ "77"์ด๋ผ๋ ๋ฌธ์์ด์ 3๊ฐ์ ๋ฌธ์๋ก ๋ณต์ฌ. ์ด ๊ฒฝ์ฐ "PP1"์ด "77"๋ก ๋ณ๊ฒฝ๋จ
printf("pc: %s\n", pc); // pc(์ฃผ์ 100์์ ์์ํ๋ "22K77")๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์ ์ถ๋ ฅ
}
printf("pb: %s\n", pb); // pb(์ฃผ์ 103์์ ์์ํ๋ "77")๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์ ์ถ๋ ฅ
return 0; // ํ๋ก๊ทธ๋จ์ ์ข
๋ฃ
}
๐ฅ %p : ํฌ์ธํฐ์ ๊ฐ์ ์ถ๋ ฅ
#include <stdio.h>
int main() {
int a[2][3] = { {1,2,3}, {4,5,6} }; // 2์ฐจ์ ๋ฐฐ์ด ์ด๊ธฐํ
printf("%p\n", a); // โ ์ฒซ ๋ฒ์งธ ์์์ ์ฃผ์ ์ถ๋ ฅ, 100
printf("%p\n", &a); // โก ๋ฐฐ์ด ์ ์ฒด์ ์ฃผ์ ์ถ๋ ฅ, 100
printf("%p\n", a[0]); // โข ์ฒซ ๋ฒ์งธ ํ์ ์ฃผ์ ์ถ๋ ฅ, 100
printf("%p\n", *a); // โฃ ์ฒซ ๋ฒ์งธ ํ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ์ฃผ์ ์ถ๋ ฅ, 100
printf("%p\n", &a[0][0]); // โค ์ฒซ ๋ฒ์งธ ์์์ ์ฃผ์ ์ถ๋ ฅ, 100
printf("%p\n", a[0]+1); // โฅ a[0][1] ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด. ์ฃผ์ 104
printf("%p\n", *a+1); // โฆ a[0][1]์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด. ์ฃผ์ 104
printf("%p\n", &a[0][0]+1); //โง a[0][1] ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด. 104
printf("%p\n", a+1); // โจ ์ฒซ ๋ฒ์งธ ํ ๋ค์์ ํ a[2], ์ฆ ๋ ๋ฒ์งธ ํ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด 112
printf("%p\n", *(a+1)); // โฉ ๋ ๋ฒ์งธ ํ์ ์์ ์ฃผ์ 112,
printf("%p\n", &a[0]+1); // โช ๋ ๋ฒ์งธ ํ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด a[2] ์ฃผ์ 112
printf("%d\n", **(a+1)); // โซ ๋ ๋ฒ์งธ ํ์ ์ฒซ ๋ฒ์งธ ์์ ๊ฐ ์ถ๋ ฅ: 4
printf("%p\n", &a+1); // โฌ ์ ์ฒด ๋ฐฐ์ด ๋ค์์ ์ฃผ์ 124
return 0;
}

๐ฅ
a+1 : a[1]
*(a+1) : a[1][0]
**(a+1) : 4
์์ ์๋ ์๊ธฐ ์์ ์ ์ ์ธํ ๋ชจ๋ ์์ ์ฝ์๋ฅผ ๋ํ๋ฉด ์๊ธฐ ์์ ์ด ๋๋ ์.