새소식

Programming Language/C++

포인터 연산과 배열 인덱싱 / C스타일의 문자열 기호적(symbolic) 상수

  • -

포인터 연산과 배열 인덱싱 

-포인터 연산이 array인덱싱에 사용된

- array 안의 내용물을 한 바퀴 돌면서 출력할 때, 포인터 연산을 사용할 수 있

int main(){

	char[] = 'Jack Jack";
    
    const int_n_name = sizeof(name)/sizeof(name[0]);
//원소 갯수 구하는 방법:
// sizeof(name) : 위 char[]의 전체 메모리 사이즈
//sizeof(name[0]) = sizeof(char) : 한 원소
// 단, Jack Jack 뒤에는, 한 글자(널)이 하나 더 숨어있다
}

	for (int i = 0; i<n_name; ++i)
	{
		cout << *(name + i);
	}
	return 0;
 }

>>실행결과: 정적 array도, 내부적으로는 포인터.

   따라서,포인터 연산이 적용되고, 마지막 공백 한 칸까지 출력

 

C스타일의 문자열 기호적(symbolic) 상수 

 

int main(){

	char[] = "Jack Jack";
    
    char *name = "Jack Jack"; //에러!
    //포인터에는 '값'(문자열)을 담을 수 없다. 포인터는 단지 어떠한 공간을 가리키기만 할 뿐

//포인터에는 '값'(문자열)을 담을 수 없다. 포인터는 단지 어떠한 공간을 가리키기만 할 뿐

>>But, 문자열 '기호적인 상수'처럼 사용할 수 있다. -> const 이용

 

앞에 const를 붙여주니, 이렇게 실행이 된다.

 

주소를 찍어주니, 같은 주소가 나왔다. => 컴파일러가 "Jack Jack"이 같으니까, 같은 공간 써! 하면서 같은 주소 준 것.

그럼 내용을 조금 바꿔보면

 

 

역시, 다른 주소가 찍히는거를 볼 수 있다.

 

 

const는 return type으로 쓰일 수 있다.

    

 

문자열 포인터는, 다른 타입과 달리   

cout에서 문자의 포인터는 특별하게 취급한다. 문자열의 포인터는, c스타일의 문자열.배열일 가능성이 높다

(주소를 출력하는게 아니라, null을 만날 때 까지 문자를 쭉~출력한다.)

그래서 int arry ->주소가 나옴 / 나머지는 문자열이 나옴. 

 

 

'Programming Language > C++' 카테고리의 다른 글

[객체지향프로그래밍 응용] 5주차  (0) 2023.04.05
(int-i c++스터디) 함수/람다식/class  (0) 2023.03.20
런타임 에러  (0) 2023.03.20
메모리 동적 할당 new와 delete  (0) 2023.03.18
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.