🖥C & C++/인프런 기초학습

[C/C++] 23강~25강 정리

728x90
반응형

< 23강. 문자열 >


문자열 : 문자들이 열거되어 있는 것


#include <stdio.h>


int main(){

    char arr[] = "Hello, world!";

    

    printf("%s\n",arr);

    

}


char을 사용해서 문자열 입력 가능 


배열처럼 []안에 안적어도 됨


#include <stdio.h>


int main(){

    char arr[] = "Hello, world!";

    

    // 배열의 크기 14, 글자수는 13개

    // 문자 뒤에 NUL 문자가 붙음('\0')

    // 문자열의 끝이다라는 것을 나타내는 것

    printf("%d\n", sizeof(arr) / sizeof(char));

    

}



#include <stdio.h>


int main(){

    char s[100];

    

    scanf("%s",s); //여기서는 &s로 사용하지 않음 이후 포인터에서 설명


    printf("%s\n",s);

    

}



문자열에서는 & 사용하지 않음, 


거의 string을 사용해서 char를 볼 일이 적긴함!



<stdio.h> 는 파일이다.(헤더 파일이라고 함 ) 내부에 있는 것을 사용하려면 include 시켜야함



#include <stdio.h>

#include <string.h>


int main(){

    char str[] = "Hello";


    int len;

    

    // strlen : 길이를 알려주는 함수

    len = strlen(str);

    

    printf("%d\n",len);

}



이제부터는 #include <string.h>를 포함시켜야 한다. 


- strlen : 길이 반환


#include <stdio.h>

#include <string.h>


int main(){

    char str1[] = "Hello";

    char str2[100];

    

    // 문자열을 복사하는 것 (빈공간,원본문자열)

    strcpy(str2,str1);

}


- strcpy : (a,b)   b의 요소를 복사하여 a에 입력함



#include <stdio.h>

#include <string.h>


int main(){

    char str[100] = "Hello ";

    strcat(str,"World!");

    

    printf("%s\n",str);

}


- strcat : (str,"")   str에 " " 사이의 문자열을 덧붙일 수 있다. 


#include <stdio.h>

#include <string.h>


int main(){

    char str1[] = "sample";

    char str2[] = "simple";

    

    // str compare

    int cmp = strcmp(str2,str1);

    

    printf("%d\n",cmp);

}


- strcmp(a,b) :  a가 b보다 순서적으로 앞에 있으면 -1(-8, 8바이트여서), a가 b보다 뒤에 있다면 1(8)을 반환, 같으면 0을 반환



< 24강. 변수 가리키기(포인터) >


포인터 (pointer) : 변수의 주소를 저장하는 변수


a에 20을 저장했을 때, ptr에 어떤 값을 넣어야 a를 지칭할 수 있는지를 알 수 있다. 그러기 위해서는 a의 주소를 먼저 알아야 한다.


칸들의 번호를 가지고 주소라고 부르는 것이다. ptr이 a를 가리키기 위해서는 a의 주소를 넣어주면 되는 것이다.


int main() {

    int a = 20;


    // pointer 하나를 선언한 것

    // *을 붙여서 구별한다.

    // 가리킬 변수의 자료형을 먼저 적어주고 *, 변수의 이름을 적어준다.

    int *ptr_a;

    

    // &a를 저장시킨다.  이제부터 &~가 나오면 주솟값을 말한다. &a면 a의 주솟값이 되는 것.

    ptr_a = &a;

    

    

    // 실행마다 다른 값이 나옴,  RAM의 상황에 따라 바뀌기 때문에

    printf("%d\n",ptr_a);

}



#include <stdio.h>


int main() {

    int a = 10;

    int b = 20;

    

    int *ptr;

    

    ptr = &a;

    printf("ptr이 가리키는 변수에 저장된 값 : %d\n",*ptr);

    

    ptr = &b;

    printf("ptr이 가리키는 변수에 저장된 값 : %d\n",*ptr);

}


각자 a,b의 값을 출력한다. 


#include <stdio.h>


int main() {

    int a = 10;

    

    int *ptr;

    ptr = &a;

    

    printf("a의 값 : %d\n", a);

    // a에 20을 넣으라는 말과 같음

    *ptr = 20;

    

    printf("a의 값 : %d\n", a);

}


#include <stdio.h>


int main() {

    int a = 10;

    

    int *ptr;

    ptr = &a;

    

    // 포인터를 가리키는 포인터를 생성

    int **ptr_ptr;

    ptr_ptr = &ptr;

    

    printf("a = %d\n",a);

    printf("&a = %d\n",&a);

    

    printf("ptr = %d\n",ptr);

    printf("&ptr = %d\n",&ptr);

    

    printf("ptr_ptr = %d\n",ptr_ptr);

    // 아래 처럼하면 ptr이 가리키는 것을 부르고 그 저장된 값을 부른다.

    printf("*ptr_ptr = %d\n",*ptr_ptr);

    // *는 ptr **는 a를 말하는 것, 10출력

    printf("**ptr_ptr = %d\n",**ptr_ptr);

}


포인터로 포인터를 가리켰어도 **을 붙이면 전전단계로 돌아가는 것 처럼 다시 a를 반환한다!



< 25강. 배열과 포인터의 관계 >


#include <stdio.h>


int main() {

    int a = 10;

    int *ptr_a = &a; // 포인터 자체에 a의 값을 저장하는 것 / 포인터가 가리키는 것에 저장하는 것 X

    

    printf("ptr_a의 값 : %d\n",ptr_a);

    // 4가 더해짐. int가 4바이트라서. 포인터가 가리키는 자료형의 크기 만큼을 더하게 됨 

    printf("ptr_a+1의 값 : %d\n",ptr_a+1);

}


#include <stdio.h>


int main() {

    int arr[10] = {1,2,3,4,5,6,7,8,9,10};

    

    printf("arr의 값 : %d\n",arr);

    // arr의 값은 arr[0]의 주솟값과 똑같음

    // 배열 하나를 선언했을 때, arr = &arr[0]이라는 것이다.

    // arr + 1 = &arr[1]이 된다.

    for (int i = 0; i< 10;i++){

        printf("&arr[%d] = %d\n",i,&arr[i]);

        // 주솟값이 4씩 차이나게 할당됨

    }

}


#include <stdio.h>


int main() {

    int arr[10] = {1,2,3,4,5,6,7,8,9,10};

    

    for (int i = 0; i < 10; i++){

        printf("%d ",arr[i]);

    }

    printf("\n");

    

    for (int i = 0; i < 10; i++){

        printf("%d ",*(arr+i));

        // arr+i = &arr[i] (arr[i]값에 있는 주솟값)

        // arr+i에 *를 붙이면서 그 주솟값이 가지는 값을 반환한다.

    }

    printf("\n");

    

    // 포인터를 선언 후 초깃값에 arr를 집어넣는다. &arr[0]의 주소를 넣는 것

    // 이 주소에 저장되있는 값을 출력하라는 것. 즉 arr[0]을 출력

    // ptr++은 arr[0], arr[1]... 로 증가시켜주는 것 1씩 증가는 int라 4바이트씩 이동이어서

    // 10이 arr + 9여서 arr+10이 되기 전에 for문 탈출!

    // 다 같은 for문이다. ptr = arr + i로 생각하면 비슷하다.

    for (int *ptr = arr; ptr < arr+10; ptr++){

        printf("%d ",*ptr);

        

    }

    printf("\n");

    

}



































728x90
반응형