C의 포인터, 배열 및 문자열

소개



포인터는 값이 다른 변수의 주소, 즉 메모리 위치의 직접 주소인 변수입니다. 모든 변수는 메모리 위치이며 모든 메모리 위치에는 메모리의 주소를 나타내는 앰퍼샌드(&) 연산자를 사용하여 액세스할 수 있는 정의된 주소가 있습니다.

#include <stdio.h>

int main () {

   int  variable1;
   char variable2[10];

   printf("Address of var1 variable: %x\n", &variable1);
   printf("Address of var2 variable: %x\n", &variable2);

   return 0;
}




Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6


문자열은 배열에 문자 시퀀스를 저장하는 데이터 유형입니다. C에서 문자열은 항상 문자열의 끝을 나타내는 null 문자(\0)로 끝납니다.


char c[] = "abcd";

char c[50] = "abcd";

char c[] = {'a', 'b', 'c', 'd', '\0'};

char c[5] = {'a', 'b', 'c', 'd', '\0'};


배열은 연속 메모리 위치에 저장된 유사한 유형의 데이터 항목 모음으로 정의됩니다. 배열은 int, char, double, float 등과 같은 기본 데이터 유형을 저장할 수 있는 C 프로그래밍 언어의 파생 데이터 유형입니다. 또한 포인터, 구조, 등.

#include<stdio.h>  
int main(){      
int i=0;    
int marks[5]={20,30,40,50,60};//declaration and initialization of array    
 //traversal of array    
for(i=0;i<5;i++){      
printf("%d \n",marks[i]);    
}    
return 0;  
}    



20
30
40
50
60


문자열에 대한 포인터 배열이란?

포인터에는 필요한 특정 변수의 주소가 포함되어 있습니다. 포인터 배열은 배열의 모든 요소의 주소를 저장하고 문자열 포인터 배열은 배열에 있는 문자열의 주소를 저장합니다. 배열에는 배열에 있는 모든 문자열 요소의 기본 주소가 포함됩니다.

다음은 이를 설명하는 예입니다.

char *arr[]={
            "Big",
            "black ",
            "Heavy",
            "Nice",
            "ball"
          };


2D 배열을 사용하는 문자열 배열:
우리가 알고 있듯이 배열은 유사한 데이터 유형의 모음이며 인접한 메모리 위치에 저장된 모든 데이터입니다. 따라서 이 경우 각 문자는 인접한 메모리 위치에 배치됩니다. 예시

char arr[ROW][COL]; //2d array of character




즉, 2D 배열을 만들면 최소한 가장 긴 문자열과 같은 열 수를 가진 배열을 만들어야 하며 더 작은 값을 가진 배열 요소에서 많은 공간 낭비가 발생합니다.

문자열에 대한 포인터 배열을 사용하는 문자열 배열:

2D 배열과 마찬가지로 문자열에 대한 포인터 배열을 사용하여 문자열 배열을 만들 수 있습니다. 기본적으로 이 배열은 각 포인터가 문자열의 첫 번째 문자를 가리키는 문자 포인터의 배열입니다.
통사론

char *arr[ROW]; //array of pointer to string





문자열 배열을 표현하려는 방법에 따라 포인터를 정의하여 배열에서 문자열에 액세스할 수 있습니다. 몇 가지 예제 코드를 보자.

**

1.) 배열에 대한 포인터를 사용하여 문자의 2d 배열에 액세스



**
문자열 배열에 액세스하려면 배열에 대한 포인터를 만들고 포인터를 배열로 초기화해야 합니다. 이제 for 루프를 사용하여 배열의 모든 문자열을 읽을 수 있습니다.

1D 배열에 대한 포인터:

#include<stdio.h>
int main()
{
    int row =0;
    //create 2d array of the characters
    char * arr[5] = {"Cloud1", "Cloud1Cloud1", "Cloud1Cloud1Cloud1", "Cloud1Cloud1Cloud1Cloud1", "Cloud1Cloud1Cloud1Cloud1"};
    //create pointer to the array
    char * (*ptrArr)[5] = NULL;
    //initialize the pointer
    ptrArr = &arr;
    for (row = 0; row < 5; ++row)// Loop for coloumb
    {
        printf("%s \n", (*ptrArr)[row]);
    }
    return 0;
}


산출:

/tmp/wY4tusyiIu.o
Cloud1 
Cloud1Cloud1 
Cloud1Cloud1Cloud1 
Cloud1Cloud1Cloud1Cloud1 
Cloud1Cloud1Cloud1Cloud1


2D 배열에 대한 포인터

#include<stdio.h>
int main()
{
    int row =0;
    //create 2d array of the characters
    char arr[5][10] = {"Coding", "Coding", "Coding", "Coding", "Coding"};
    //create pointer to the 2d array
    char (*ptrArr)[5][10] = NULL;
    //initialize the pointer
    ptrArr = &arr;
    for (row = 0; row < 5; ++row)// Loop for coloumb
    {
        printf("%s \n", (*ptrArr)[row]);
    }
    return 0;
}


산출:

/tmp/wY4tusyiIu.o
Coding 
Coding 
Coding 
Coding 
Coding 


** 포인터에 대한 포인터**

#include<stdio.h>
int main()
{
    int row =0;
    //create 2d array of the characters
    char * arr[5] = {"pointer2pointer", "pointer2pointer", "pointer2pointer", "pointer2pointer", "pointer2pointer"};
    //create pointer to the array
    char **ptr = NULL;
    //initialize the pointer with array
    ptr = arr;
    for (row = 0; row < 5; ++row)// Loop for coloumb
    {
        printf("   %s \n", ptr[row]);
    }
    return 0;
}


산출:

/tmp/wY4tusyiIu.o
pointer2pointer 
   pointer2pointer 
   pointer2pointer 
   pointer2pointer 
   pointer2pointer



문자열 포인터 배열의 장점
  • 메모리에서 더 적은 공간을 차지합니다. 문자열 배열과 비교할 때 문자열에 대한 포인터 배열은 더 적은 공간을 차지합니다. 이것은 메모리 공간의 효과적인 사용을 의미합니다. 2D 배열을 만들면 최소한 가장 긴 String과 같은 열 수를 가진 배열을 만들어야 하고 더 작은 값을 가진 배열 요소에서 많은 공간 낭비가 발생하기 때문입니다.
  • 문자열 조작: 문자열에 대한 포인터 배열을 사용하면 문자열을 조작하고 문자열에 대해 다른 작업을 수행하는 것이 훨씬 쉬워집니다.
  • 좋은 웹페이지 즐겨찾기