728x90
반응형
# include <stdio.h>

int main()
{
	int arr[5] = {100,200,300,400,500};
	int *ptr1,*ptr2,*ptr3;
	
	ptr1 = arr; //배열은 그 자체가 주소처럼 작동하기 때문에 &(앰퍼샌드)생략
	
	printf("%p %p %d %p\n",ptr1,arr,*ptr1,&ptr1);  //대입한 배열의 주소, 배열의 주소, 데이터의 값, 포인터 자체의 주소.
	 
	ptr2 = &arr[2]; // 배열의 index는 0부터 시작. 실제로는 3번째 값인 300
	
	printf("%p %d %p\n",ptr2,*ptr2,&ptr2);  // 대입한 배열arr[2]의 주소, 값, 포인터 변수 ptr2의 주소 
	
	ptr3 = ptr1+4;  //단순한 4byte를 더하는 것이 아니라 4byte값이 4번 더하는 값을 더한다. arr[0] + 4 = arr[4] 
	
	printf("%p %d %p\n",ptr3,*ptr3,&ptr3); // 대입한 배열의 주소, 값, 포인터 변수 ptr3의 주소 
	
	printf("%td\n",ptr3-ptr1); // %t 가 들어가는 경우 pointer의 차이를 출력할 때 사용한다. 
	// 4
	
	//증감연산자
	ptr1++; // 후위는 ptr1을 먼저 사용하고(선언)? 하고 증감연산을 한다.  
	ptr1--; // 전위는 먼저 증감연산을 하고 선언이나 사용,대입을 한다. 
	--ptr1;
	++ptr1; 
	
	//포인터끼리의 비교
	if(ptr1==ptr3)
		printf("같다.\n");
	else
		printf("ptr1과 ptr3는 같지 않다.\n"); 
	//비교도 가능하지만 ptr의 자료형이 현재는 integer지만 다른 자료형의 포인터 변수와는 비교가 불가능. 하고싶다면 형변환 하고 비교 가능.
	 
	
	 
}

[그림1] 포인터 연산 정리 출력

 

 

출처 : 인프런 홍정모의 따라하며 배우는 c언어

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기