less than 1 minute read

EX

#include <bits/stdc++.h> 
#define ll long long
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    char c[] = "wassup";
    char* cp = c; //배열의 이름은 배열의 처음주소이므로 가능
    printf("%s\n", cp); //wassup
    for (int i = 0; i < strlen(c); i++)
    {
        printf("%s\n", cp++);
        /*
        * wassup
        assup
        ssup
        sup
        up
        p
        */
    }

    return 0;
}

EX2

#include <bits/stdc++.h> 
#define ll long long
using namespace std;

void print(char* str) // char str[]
{
    while (*str != '\0')
    {
        printf("%c", *str);//wassup
        str++; //str = str + 1;
       
    }
    cout << "\n" << &str << "\n";
    //  000000A57612F590
}

void pp(int arr[])
{
    cout << arr << "\n";
    //000000A57612F5E8
}


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    char c[20] = "wassup"; //문자열이 배열을 위한 공간에 저장된다.
    //char *c 문자열이 컴파일시간에 const로 저장된다.
    print(c);
    cout << &c << "\n";
    //000000A57612F5B8
    int a[] = { 1,2,3,4,5 };
    pp(a);
    cout << a;
    //000000A57612F5E8
    return  0;
}

shot1
char를 함수에 인수로 전달하게 되면 *str = &c[0] 이런식으로 된다.
stack에 포인터의 기본크기 4바이트만큼 인수로 전달된 배열을 가리키는 포인터를 새로 만드는것이다. 예시와 그림 참조.
64비트 운영체제에서는 8바이트 나옵니다.

이영상을 참조하면 좋습니다.

Leave a comment