기초CS - 포인터 5

킴스코딩클럽·2022년 10월 14일
1

CS기초 시리즈

목록 보기
34/71

포인터 활용 문제

nt array[2][3]{{1,2,3},{5,6,7}};
int (*p)[3]{array};


문제

  • p
  • *p
  • p+1
  • *(p+1)
  • *(p+1) +2
  • (p + 1)

  • 배열 123의 주소
  • *p 포인터를 역참조하고 들어가면 배열이나옴 배열에서 0번 원소의 주소
  • p+1 >> 배열 567의 주소
  • p+1의 역참조는 567배열의 첫번째 주소 +2(옆으로 두 칸) 배열 7의 주소
  • p를 역참조하면 배열이 나옴 그걸 옆으로 한 칸 보내면 배열 2의 주소

그럼 위 문제랑 문법적으로 같은 표기는?

  • p는 포인터 => 첫번째 원소의 주소 >> &p[0]
  • *p는 p 포인터의 역참조 >> 그래서 &가 빠짐 p[0]
  • p의 첫번째 원소의 주소 >> &p[1]
  • p의 1번째 원소 포인터의 역참조 >> p[1]
  • p의 첫번째 원소에 +2를 한것 >> p[1] +2
  • p의 0번째 원소에서 한칸 옮긴 p[0][1]

p는 첫번째 원소의 주소 >>&array[0]
p+1은 >>&array[0]+1>>&array[1] (한칸 옆으로 가면됨으로)
*(p+1) 역참조가 들어감으로 주소가 삭제 >>array[1]>>array[1][0]


a[i][j] = a[i]+j
j만큼 옆으로 이동으로 표현할 수 있음

(a[i] +j)
(*(a+i)+j)


2차원 배열을 포인터 연산으로 출력해 보자


int main()
{
	int array[2][3]{
		{1,2,3},
		{4,5,6}
	};
	int(*p)[3] {array};

	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
        	//std::cout<<array[i][j];
			std::cout << *(*(p + i)) + j;
		}
		
	}
}

or

int main()
{
	int array[2][3]{
		{1,2,3},
		{4,5,6}
};
    
int *p = &array[0][0];

for(int i = 0;i<6;i++)
{
    	std::cout<<*p++<<; 
        //이차원이라도 어차피 옆으로 이동하는것
    
}   
profile
공부 기록용

0개의 댓글