C/C++ 캐릭터 배열에서의 포인터
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;
}
char를 함수에 인수로 전달하게 되면 *str = &c[0] 이런식으로 된다.
stack에 포인터의 기본크기 4바이트만큼 인수로 전달된 배열을 가리키는 포인터를 새로 만드는것이다. 예시와 그림 참조.
64비트 운영체제에서는 8바이트 나옵니다.
Leave a comment