ν°μ€ν 리 λ·°
πν¬μΈν°
ν¬μΈν° λ³μλ λ©λͺ¨λ¦¬μ μ£Όμ κ°μ μ μ₯νκΈ° μν λ³μμ΄λ€. μ¬κΈ°μ ν¬μΈν° λ³μλ 1) λ³μ ννμ ν¬μΈν°μ 2) μμ ννμ ν¬μΈν°λ₯Ό μ΄μ°λ₯΄λ ννμ΄λ€.
πν¬μΈν° λ³μ μ΄κΈ°ν
ν¬μΈν° λ³μλ₯Ό μ°μ μ μΈλ§ ν΄λκ³ , μ΄νμ μ ν¨ν μ£Όμ κ°μ μ±μλ£μ μκ°μ΄λΌλ©΄ 'λ ν¬μΈν°'λ₯Ό νμ©νλ κ²μ΄ μ’λ€.
int main()
{
int *ptr1=0;
int *ptr2=NULL; //NULLμ μ¬μ€μ 0μ μλ―Έ
}
λ ν¬μΈν°λ μ무λ°λ κ°λ¦¬ν€μ§ μμμ λ»νκΈ° λλ¬Έμ λ°μ΄ν° 리μ€ν¬ μμ΄ κ°μ μ΄κΈ°ν ν μ μλ€.
πν¬μΈν°μ λ°°μ΄μ κ΄κ³
λ°°μ΄μ μ΄λ¦μ λ°°μ΄μ μμ μ£Όμ κ°μ μλ―Ένλ©°, κ·Έ ννλ κ°μ μ μ₯μ΄ λΆκ°λ₯ν μμμ΄λ€.
λ€μ λ§νμλ©΄ λ°°μ΄μ μ΄λ¦μ κ°μ λ°κΏ μ μλ μμ ννμ ν¬μΈν°μ΄λ€.
β μμ
#include <stdio.h>
int main()
{
int arr[3] = { 1,2,3 };
printf("λ°°μ΄μ μ΄λ¦: %p \n", arr);
printf("첫 λ²μ§Έ μμ: %p \n", &arr[0]);
printf("λ λ²μ§Έ μμ: %p \n", &arr[1]);
printf("μΈ λ²μ§Έ μμ: %p \n", &arr[2]);
//arr=&arr[i];
return 0;
}
μ¬κΈ°μ %pλ μ£Όμ κ°μ μΆλ ₯μ μ¬μ©λλ μμ λ¬Έμμ΄λ€.
RESULT:
κ²°κ³Ό κ° (μμ κ°μ μ°¨μ΄κ° 4μ© λλ λͺ¨μ΅)μ ν΅ν΄ intν λ°°μ΄μμκ° μ£Όμ κ°μ μ°¨λ 4byteλΌλ μ¬μ€μ μ μ μλ€.
λν λ°°μ΄μ 첫λ²μ§Έ λ°μ΄νΈμ μ£Όμκ°κ³Ό λ°°μ΄μ μ΄λ¦μ μΆλ ₯ν κ²°κ³Όκ° κ°λ€λ μ¬μ€λ νμΈ κ°λ₯νλ€.
μ¦, μμμ μΈκΈνλ― λ°°μ΄μ μ΄λ¦μ λ°°μ΄μ μμ μ£Όμ κ°μ μλ―Ένλ©° κ·Έ ννμ κ°μ μ μ₯μ΄ λΆκ°λ₯ν μμμ΄λ€.
π ν¬μΈν° μ°μ°
intν ν¬μΈν°λ₯Ό λμμΌλ‘ 1μ μ¦κ°μν€λ©΄ 4κ° μ¦κ°νκ³ doubleν ν¬μΈν°λ₯Ό λμμΌλ‘ 1μ μ¦κ°μν€λ©΄ 8μ΄ μ¦κ°νλ€.
μ¦, typeν ν¬μΈν°λ₯Ό λμμΌλ‘ nμ ν¬κΈ°λ§νΌ κ°μ μ¦κ° λ° κ°μμ, n * sizeof(TYPE) μ ν¬κΈ°λ§νΌ μ£Όμ κ°μ΄ μ¦κ° λ° κ°μνλ€.
β μμ
#include <stdio.h>
int main()
{
int arr[3] = { 11,22,33 };
int* ptr = arr;
printf("%d %d %d \n", *ptr, *(ptr + 1), *(ptr + 2));
printf("%d", *ptr); ptr++; //printf ν¨μ νΈμΆ ν, ptr++ μ§ν
printf("%d", *ptr); ptr++;
printf("%d", *ptr); ptr--; // printf ν¨μ νΈμΆ ν, ptr-- μ§ν
printf("%d", *ptr); ptr--;
printf("%d", *ptr); printf("\n");
return 0;
}
RESULT:
ν¬μΈν° λ³μ ptrμ intν ν¬μΈν°μ΄λ―λ‘ κ°μ 1 μ¦κ°μν€λ μ°μ°μ ν λλ§λ€ μ€μ λ‘λ 4μ© μ¦κ°νλ€.
π *(++ptr)κ³Ό *(ptr+1)μ μ°¨μ΄
μ μμ λ₯Ό λ°νμΌλ‘ *(++ptr)κ³Ό *(ptr+1)μ μ°¨μ΄λ₯Ό μ μ μλ€.
*(++ptr)μ ptrμ μ μ₯λ κ° μ체λ₯Ό λ³κ²½νμ§λ§ *(ptr+1)μ ptrμ μ μ₯λ κ°μ λ³κ²½λμ§ μλλ€.
μ¦, μ μλ ++ μ°μ°μ κ²°κ³Όλ‘ μΈν΄μ ν¬μΈν° λ³μ ptrμ μ μ₯λ κ°μ΄ 4λ§νΌ μ¦κ°νλ€. κ·Έλ¬λ νμμ +μ°μ°μΌλ‘ μΈν΄μλ ptrμ μ μ₯λ κ°μ΄ μ¦κ°νμ§ μκ³ μ¦κ°λ κ°μ μ°μ°μ κ²°κ³Όλ‘ μ»μ΄μ *λ₯Ό μ§ννλ κ²μ΄λ€.
κ²°κ³Όμ μΌλ‘ arr[i]λ *(arr+i)μ λμΌνλ€.
π μμ ννμ λ¬Έμμ΄μ κ°λ₯΄ν€λ ν¬μΈν°
λ λ¬Έμκ° μ½μ λλ λ¬Έμμ΄μ μ μΈλ°©μμλ 1) λ°°μ΄μ μ΄μ©νλ λ°©μ 2) charν ν¬μΈν° λ³μλ₯Ό μ΄μ©νλ λ°©μμ΄ μλ€.
char str1[]="My String"; // λ°°μ΄μ κΈΈμ΄λ μλμΌλ‘ κ³μ°
char *str2="Your String";
μμ μ½λμ λμ§Έμ€μ²λΌ ν¬μΈν° λ³μλ₯Ό μ΄μ©νλ λ°©μμΌλ‘ λ¬Έμμ΄μ μ μΈνκ² λλ©΄ λ©λͺ¨λ¦¬ 곡κ°μ λ¬Έμμ΄ "Your String"μ΄ μ μ₯λκ³ , λ¬Έμμ΄μ 첫 λ²μ§Έ λ¬Έμ Yμ μ£Όμκ°μ΄ λ°νλλ€. κ·Έλ¦¬κ³ κ·Έ λ°ν κ°μ΄ ν¬μΈν° λ³μ str2μ μ μμΌλ€. κ·Έλμ str2λ₯Ό charν ν¬μΈν°λ‘ μ μΈν κ²μ΄λ€.
1) κ³Ό 2) λ λͺ¨λ λ¬Έμμ΄μ μμ μ£Όμ κ°μ λ΄κ³ μλ€λ μΈ‘λ©΄μμλ λμΌνλ€. κ·Έλ¬λ λ°°μ΄ μ΄λ¦μΈ str1μ μμννμ ν¬μΈν°κΈ° λλ¬Έμ λμμ λ³κ²½ν μ μμ§λ§ λ³μ ννμ ν¬μΈν°μ str2λ λμμ λ³κ²½ν μ μλ€λ μ°¨μ΄μ μ μ§λλ€.
[ν¬μΈν°λ₯Ό μ΄μ©ν λ°°μ΄μ μ κ·Ό]
π μμ 1)
κΈΈμ΄κ° 5μΈ intν λ°°μ΄ arrμ μ μΈνκ³ μ΄λ₯Ό 1,2,3,4,5λ‘ μ΄κΈ°νν λ€μ, μ΄ λ°°μ΄μ 첫 λ²μ§Έμμλ₯Ό κ°λ¦¬ν€λ ν¬μΈν° λ³μ ptrμ μ μΈνλ€. κ·Έ λ€μ ν¬μΈν° λ³μ ptrμ μ μ₯λ κ°μ μ¦κ°μν€λ ννμ μ°μ°μ κΈ°λ°μΌλ‘ λ°°μ΄μμμ μ κ·Όνλ©΄μ λͺ¨λ λ°°μ΄μμμ κ°μ 2μ© μ¦κ°μν€κ³ , μ μμ μΌλ‘ μ¦κ°κ° μ΄λ€μ‘λμ§ νμΈνλ μμ λ₯Ό μμ±ν΄λ³΄μ.
π€¦βοΈ μκ° κ³Όμ
1. κΈΈμ΄κ° 5μΈ int ν λ°°μ΄κ³Ό ν¬μΈνΈ λ³μ ptrμ μ μΈνμ
2. λͺ¨λ ptrμ μ μ₯λ κ°μ μ¦κ°μμΌμΌ νλ λ°λ³΅λ¬Έμ ν΅ν΄μ arr[i] λ₯Ό μ΄μ©νμ¬ λ°°μ΄μ λͺ¨λ μμ 2λ₯Ό λν΄λκ°μ
3. μ μμ μΌλ‘ μ¦κ° λμλμ§ νμΈνκΈ° μν΄ λ§μ§λ§μ printf λ₯Ό ν΅ν΄ μΆλ ₯ν΄μ£Όμ
λ΄κ° μκ°ν λ΅
#include <stdio.h>
int main()
{
int i = 0;
int arr[5] = { 1,2,3,4,5 };
int* ptr = arr;
for (i = 0; i < 5; i++)
{
arr[i] + 2;
}
printf("%d", arr[5]);
return 0;
}
RESULT:
λ΅μ:
#include <stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 }; // λ°°μ΄ μ μΈκ³Ό μ΄κΈ°ν
int* ptr = arr; // 첫λ²μ§Έ μμλ₯Ό κ°λ₯΄ν€λ ν¬μΈν° λ³μ ptr μ μΈ
int i;
for (i = 0; i < 5; i++) // λ°λ³΅λ¬Έμ ν΅ν΄ λ©λͺ¨λ¦¬ κ³΅κ° ν¬μΈν°μ μ κ·Ό
{
*ptr = *ptr + 2;
ptr++;//λ°°μ΄μ λͺ¨λ μμμ κ°κΈ° μν¨
}
for (i = 0; i < 5; i++)
printf("%d", arr[i]);
return 0;
}
RESULT:
β 보좩ν λΆλΆ
1. ν¬μΈν°μ λν΄ μμ§κ° μμ§ λλμλμ§ λ©λͺ¨λ¦¬ μ£Όμκ°μ λν λ΄μ©μ΄ μλ κ·Έλ₯ λ°°μ΄ μ체μ μ κ·Όνμ¬ ν¬μΈν° λ³μλ₯Ό νμ©νμ§ μμλ€.
2. λͺ¨λ λ°°μ΄μμμ κ°μ 2μ© μ¦κ°μν€λ λ°©μμ *ptrμ νμ©νμ¬ κ°λ³κ² μ²λ¦¬ν μ μλ¨ μ
β λ¬Έμ λ₯Ό μ λλ‘ μμ§νμ§ μμλ€. (μμ 2μ 쑰건μΌλ‘ λ¬Έμ λ₯Ό μ κ·Ό)
π μμ 2)
λ¬Έμ 1μμλ ν¬μΈν° λ³μ ptrμ μ μ₯λ κ°μ λ³κ²½μμΌκ°λ©΄μ λ°°μ΄μμμ μ κ·ΌνλΌκ³ νμλ€. κ·Έλ°λ° μ΄λ²μλ ν¬μΈν° λ³μ ptrμ μ μ₯λ κ°μ λ³κ²½μν€μ§ μκ³ , ptr λμμΌλ‘ λ§μ μ°μ°μ νμ¬, κ·Έ κ²°κ³Όλ‘ λ°νλλ μ£Όμ κ°μ ν΅ν΄μ λͺ¨λ λ°°μ΄μμμ μ κ·Όνμ¬ κ°μ 2μ© μ¦κ°μν€λ μμ λ₯Ό μμ±ν΄λ³΄μ.
π€¦βοΈ μκ° κ³Όμ
μμ 1κ³Ό λμΌνκ² μκ°
λ΄κ° μκ°ν λ΅
#include <stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int* ptr = arr;
int i;
for (i = 0; i < 5; i++)
arr[i] = arr[i] + 2;
for (i = 0; i < 5; i++)
printf("%d", arr[i]);
return 0;
}
RESULT:
λ΅μ:
#include <stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int* ptr = arr;
int i;
for (i = 0; i < 5; i++)
* (ptr + i) = *(ptr + i) + 2;
for (i = 0; i < 5; i++)
printf("%d", arr[i]);
return 0;
}
μ¦, 1λ²κ³Ό 2 λ² λ¬Έμ λ arr[i] == *(arr+i) λ₯Ό λμΆνκΈ° μν μλ λ¬Έμ
π μμ 3)
κΈΈμ΄κ° 6μΈ int λ°°μ΄ arrμ μ μΈνκ³ μ΄λ₯Ό 1,2,3,4,5,6μΌλ‘ μ΄κΈ°νν λ€μ, λ°°μ΄μ μ μ₯λ κ°μ μμκ° 6,5,4,3,2,1 μ΄ λλλ‘ λ³κ²½νλ μμ λ₯Ό μμ±ν΄λ³΄μ. λ¨, λ°°μ΄μ μκ³Ό λ€λ₯Ό κ°λ¦¬ν€λ ν¬μΈν° λ³μ λ κ°λ₯Ό μ μΈν΄μ μ΄λ₯Ό νμ©νμ¬ μ μ₯λ κ°μ μμλ₯Ό λ€λ°κΏμΌ νλ€.
π€¦βοΈ μκ° κ³Όμ
1. λ¨Όμ λ°°μ΄μ μκ³Ό λ€λ₯Ό κ°λ₯΄ν€λ ν¬μΈν° λ³μ λκ°λ₯Ό μ μΈνμ¬ λ€ λ°κΏμΌνλ tempλΌλ μλ‘μ΄ λ³μλ₯Ό ν΅ν΄ λμ μμΉλ₯Ό λ°κΏμ€λ€.
λ΅μ:
#include <stdio.h>
int main()
{
int arr[6] = { 1,2,3,4,5,6 };
int* fptr = &arr;
int* bptr = &arr[5];
int i, temp;
for (i = 0; i < 3; i++)
{
temp = *fptr;
*fptr = *bptr;
*bptr = temp;
fptr = fptr + 1;
bptr = bptr - 1;
}
for (i = 0; i < 6; i++)
printf("%d", arr[i]);
return 0;
}
'μΈμ΄ > C' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CμΈμ΄] λ€μ°¨μ λ°°μ΄ (0) | 2023.02.19 |
---|---|
[CμΈμ΄] call-by-value VS call-by-reference (0) | 2023.02.17 |
[CμΈμ΄] λ°°μ΄μ μ΄μ©ν λ¬Έμμ΄ λ³μμ νν (0) | 2023.02.13 |
[CμΈμ΄] 1μ°¨μ λ°°μ΄ (0) | 2023.02.12 |
[CμΈμ΄] 쑰건문 (0) | 2023.02.03 |