γμ€μ±μ°μ μ΄ν C νλ‘κ·Έλλ°γ μ μ°Έκ³ νμμ΅λλ€.
γμ€μ±μ°μ μ΄ν C νλ‘κ·Έλλ°γ μ€ ν·κ°λ Έλ λ΄μ©μ μ 리ν©λλ€.
13-1 ; ν¬μΈν°μ λ°°μ΄μ κ΄κ³
λ°°μ΄μ μ΄λ¦μ ν¬μΈν°.
λ¨, κ°μ λ°κΏ μ μλ 'μμ ννμ ν¬μΈν°', 'ν¬μΈν° μμ'
%p : μ£Όμ κ°μ μΆλ ₯μ μ¬μ©νλ μμλ¬Έμ
λΉκ΅μ‘°κ±΄ \ λΉκ΅λμ | ν¬μΈν° λ³μ | λ°°μ΄μ μ΄λ¦ |
μ΄λ¦μ΄ μ‘΄μ¬νλκ°? | μ‘΄μ¬ | μ‘΄μ¬ |
무μμ λνλ΄κ±°λ μ μ₯νλκ°? | λ©λͺ¨λ¦¬μ μ£Όμ κ° | λ©λͺ¨λ¦¬μ μ£Όμ κ° |
μ£Όμ κ°μ λ³κ²½μ΄ κ°λ₯νκ°? | κ°λ₯ | λΆκ°λ₯(μμ) |
1μ°¨μ λ°°μ΄μ΄λ¦μ ν¬μΈν° νμ λ°°μ΄μ μ΄λ¦μ΄ κ°λ¦¬ν€λ λμμ κΈ°μ€μΌλ‘ κ²°μ
ν¬μΈν° λ³μλ₯Ό λ°°μ΄μ μ΄λ¦μ²λΌ μ¬μ©νλ κ²½μ°λ κ±°μ μκ³ , λ°°μ΄μ μ΄λ¦μ ν¬μΈν° λ³μμ²λΌ μ¬μ©νλ κ²½μ°λ κ±°μ μλ€.
νμ§λ§ μ΄κ² κ°λ₯νλ€λ 건 μμμΌ νλ€.
13-2 ; ν¬μΈν° μ°μ°
TYPEν ν¬μΈν°λ₯Ό λμμΌλ‘ nμ ν¬κΈ°λ§νΌ κ°μ μ¦κ° λ° κ°μ μ,
n × sizeof(TYPE)μ ν¬κΈ°λ§νΌ μ£Όμ κ°μ΄ μ¦κ° λ° κ°μνλ€.
// μλμ λ λ¬Έμ₯ λͺ¨λ νμ¬ ptrμ΄ κ°λ¦¬ν€λ μμΉμμ 4λ°μ΄νΈ λ¨μ΄μ§ λ©λͺ¨λ¦¬ 곡κ°μ 20μ μ μ₯νλ λ¬Έμ₯.
*(++ptr)=20; // ptrμ μ μ₯λ κ° μ체λ₯Ό λ³κ²½
*(ptr+1)=20; // ptrμ μ μ₯λ κ°μ λ³κ²½λμ§ μμ
첫 λ²μ§Έ λ¬Έμ₯ : ++ μ°μ°μ κ²°κ³Όλ‘ μΈν΄μ ν¬μΈν° λ³μ ptrμ μ μ₯λ κ°μ΄ 4λ§νΌ μ¦κ°
λ λ²μ§Έ λ¬Έμ₯ : + μ°μ°μΌλ‘ μΈν΄μλ ptrμ μ μ₯λ κ°μ΄ μ¦κ°νμ§ μμ. λ€λ§, μ¦κ°λ κ°μ μ°μ°μ κ²°κ³Όλ‘ μ»μ΄μ * μ°μ° μ§ν
arr[i] == *(arr+i)
λ¬Έμ 13-1 [ν¬μΈν°λ₯Ό μ΄μ©ν λ°°μ΄μ μ κ·Ό]
- λ¬Έμ 1
#include <stdio.h>
int main(int argc, const char * argv[]) {
int arr[5] = {1,2,3,4,5};
int * ptr = arr;
int i;
for(i=0; i<5; i++){
*ptr += 2;
printf("μ£Όμ : %p\n", ptr); // ptrμ μ μ₯λ κ°μ΄ μ¦κ°
printf("%d\n", arr[i]);
ptr++;
}
printf("\n");
return 0;
}
- λ¬Έμ 2
#include <stdio.h>
int main(int argc, const char * argv[]) {
int arr[5] = {1,2,3,4,5};
int * ptr = arr;
int i;
for(i=0; i<5; i++){
*(ptr+i) += 2;
printf("μ£Όμ : %p\n", ptr); // ptrμ μ μ₯λ κ°(μ£Όμ) λ κ·Έλλ‘!
printf("%d\n", arr[i]);
}
printf("\n");
return 0;
}
- λ¬Έμ 3
#include <stdio.h>
int main(int argc, const char * argv[]) {
int arr[5] = {1,2,3,4,5};
int * ptr = &arr[4];
int i, sum = 0;
for(i=0; i<5; i++){
sum += *ptr;
ptr--;
}
printf("%d \n", sum);
return 0;
}
/*
sum += *ptr;
ptr--;
μ΄ λ μ€μ
sum += *(ptr--);
μ΄ ν μ€λ‘ μ€μΌ μ μλ€!
*/
- λ¬Έμ 4
#include <stdio.h>
int main(int argc, const char * argv[]) {
int arr[6] = {1,2,3,4,5,6};
int * ptr1 = arr; // λ°°μ΄μ 맨 μ κ°λ¦¬ν€κΈ°
int * ptr2 = &arr[5]; // λ°°μ΄μ 맨 λ€ κ°λ¦¬ν€κΈ°
int i;
int temp;
for (i=0; i<6/2; i++){
temp = *(ptr1+i);
*(ptr1+i) = *(ptr2-i);
*(ptr2-i) = temp;
}
int j; // j μ μΈ μνκ³ κ± iλ‘ ν΄λ λ
for(j=0; j<6; j++){
printf("%d ", arr[j]);
}
printf("\n");
return 0;
}
/*
μ°Έκ³ . chap11-2-2 ν΄μ€ (p271)
char voca[100];
int len=0, i;
char temp;
printf("μλ¨μ΄ μ
λ ₯: ");
scanf("%s", voca);
while(voca[len] != '\0')
len++;
for(i=0; i<len/2; i++){
temp=voca[i]; // μμ λ¬Έμ μμλ‘ μ μ₯
voca[i] = voca[(len-i)-1]; // λ€μ λ¬Έμ μμΌλ‘. λ°°μ΄μ΄λκΉ -1.
voca[(len-i)-1] = temp; // μμ λ¬Έμλ₯Ό λ€λ‘
}
printf("λ€μ§ν μλ¨μ΄: %s \n", voca);
*/
13-3 ; μμ ννμ λ¬Έμμ΄μ κ°λ¦¬ν€λ ν¬μΈν°
λ κ°μ§ ννμ λ¬Έμμ΄ νν
char str1[] = "My String"; // λ³μ ννμ λ¬Έμμ΄
μ΄λ λ°°μ΄μ κΈ°λ°μΌλ‘ νλ 'λ³μ ννμ λ¬Έμμ΄' μ μΈ.
λ¬Έμμ΄μ μΌλΆλ₯Ό λ³κ²½ν μ μκΈ° λλ¬Έ
str1μ μμννμ ν¬μΈν°. (κ°λ¦¬ν€λ λμμ λ³κ²½ν μ μλ€)
char * str2 = "Your String"; // μμ ννμ λ¬Έμμ΄
str2 = "Our String"; // str2 κ° κ°λ¦¬ν€λ λμμ λ¬Έμμ΄ "Our String"μΌλ‘ λ³κ²½
λ¬Έμμ΄μ λ΄μ© λ³κ²½μ΄ λΆκ°λ₯ν 'μμ ννμ λ¬Έμμ΄'
λ©λͺ¨λ¦¬ 곡κ°μ λ¬Έμμ΄ "Your String"μ΄ μ μ₯λκ³ ,
λ¬Έμμ΄μ 첫λ²μ§Έ λ¬Έμ Yμ μ£Όμ κ°μ΄ λ°νλκ³ , λ°ν κ°μ΄ ν¬μΈν° λ³μ str2μ μ μ₯.
μ¦, str2λ λ³μ ννμ ν¬μΈν°.
#include <stdio.h>
int main(int argc, const char * argv[]) {
char str1[]="My String"; // λ³μ ννμ λ¬Έμμ΄
char * str2 = "Your string"; // μμ ννμ λ¬Έμμ΄
printf("%s %s \n", str1, 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 * str = "Const String";
μμ λ¬Έμ₯μ΄ μ€νλλ©΄
λ¨Όμ λ¬Έμμ΄μ΄ λ©λͺ¨λ¦¬ 곡κ°μ μ μλκ³ , κ·Έ λ©λͺ¨λ¦¬μ μ£Όμ κ°μ΄ λ°νλ¨.
char * str = 0x1234; // μ£Όμ 0x1234λΌκ³ κ°μ
printf("Show your string");
λ©λͺ¨λ¦¬ 곡κ°μ λ¬Έμμ΄μ΄ μ μ₯λ μ΄νμ μλμ ννκ° λ¨
printf(0x1234); // λ¬Έμμ΄μ΄ 0x1234λ²μ§μ μ μ₯λμλ€κ³ κ°μ
μ¦, printf ν¨μλ λ¬Έμμ΄μ ν΅μ§Έλ‘ μ λ¬ λ°λ ν¨μκ° μλ, λ¬Έμμ΄μ μ£Όμ κ°μ μ λ¬λ°λ ν¨μ.
WhoAreYou("Hong"); // WhoAreYouλΌλ μ΄λ¦μ ν¨μνΈμΆ
μμ ν¨μ νΈμΆλ¬Έμ 보면, μ΄ ν¨μμ 맀κ°λ³μ μ μΈμ΄ μλμ κ°μμ μ§μν μ μλ€.
μ€μ λ‘ μ λ¬λλ κ°μ λ¬Έμ Hμ μ£Όμ κ°μ΄κΈ° λλ¬Έμ΄λ€.
void WhoAreYou(char * str){....}
13-4 ; ν¬μΈν° λ³μλ‘ μ΄λ€μ§ λ°°μ΄ : ν¬μΈν° λ°°μ΄
ν¬μΈν° λ°°μ΄
ν¬μΈν° λ³μλ λ³μμ΄λ, μ΄λ₯Ό λμμΌλ‘λ λ°°μ΄μ μ μΈν μ μλ€.
'ν¬μΈν° λ°°μ΄' : ν¬μΈν° λ³μλ‘ μ΄λ€μ§, κ·Έλμ μ£Όμ κ°μ μ μ₯μ΄ κ°λ₯ν λ°°μ΄
int num1=10, num2=20, num3=30;
int * arr[3]={&num1, &num2, &num3}; // intν ν¬μΈν° μ μΈ, μ£Όμ κ°μΌλ‘ μ΄κΈ°ν
λ¬Έμμ΄ λ°°μ΄ (λ¬Έμμ΄μ μ μ₯νλ ν¬μΈν° λ°°μ΄)
'λ¬Έμμ΄ λ°°μ΄' : λ¬Έμμ΄μ μ£Όμ κ°μ μ μ₯ν μ μλ λ°°μ΄, charν ν¬μΈν° λ°°μ΄
char * strArr[3]; // κΈΈμ΄κ° 3μΈ charν ν¬μΈν° λ°°μ΄
int main(int argc, const char * argv[]) {
char * strArr[3] = {"Simple", "String", "Array"};
printf("%s \n", strArr[0]); // "Simple" μΆλ ₯
printf("%s \n", strArr[1]); // "String" μΆλ ₯
printf("%s \n", strArr[2]); // "Array" μΆλ ₯
return 0;
}
ν°λ°μ΄νλ‘ λ¬Άμ¬μ ννλλ λ¬Έμμ΄μ
κ·Έ ννμ μκ΄ μμ΄ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λ ν
κ·Έ μ£Όμ κ°μ΄ λ°νλλ€.
μ¦,
char * strArr [3] = {0x1234, 0x3456, 0x5678};
μ κ°μ΄ μ£Όμ κ°μ΄ λ°νλ¨.