C언어 - 포인터의 호환성(Compatibility)

2020. 11. 12. 15:04개인공부/C언어

문법적으로 가능하지만 사용하기를 권장하지 않는 내용들.

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>



int main() {

	///* Pointer Compatibility */

	//int n = 5;
	//double x;
	//x = n;	//no error
	//int* p1 = &n; 
	//double* pd = &x;
	//pd = p1; // warning
	//// int를 double에 넣는 건 가능하나 warning


	//int* pt;	//그냥 포인터
	//int(*pa)[3];	//3개짜리 원소를 가진 배열에 대한 포인터를 담을수 있는 그릇	
	//int ar1[2][3] = { 3, };
	//int ar2[3][2] = { 7, };
	//int** p2;	// 이중포인터

	//pt = &ar1[0][0];	//2차원 배열의 한주소를 담은것 

	//pt = ar1[0];		//pointer-to-int
	//
	////pt = ar1;			// Warning (Error)
	//					// ar1은 이차원배열이기 때문에 그냥 포인터에는 담을수 없다.

	//pa = ar1;			// ar1는 원소가3개짜리인 배열의 배열
	//					// pa는원소가 3개짜리인 배열의 포인터를 담은 그릇

	////pa = ar2;			// Warning ar2는 원소2개짜리 배열을 가진 배열이기때문에

	//p2 = &pt;			// pointer-to-int * // 포인터의 주소를 담을수 있다.
	//*p2 = ar2[0];		// pointer-to-int
	//p2 = ar2;			// Warning (Error)
	////Notes
	//// -p2 : pointer to pointer to int
	////		int에 대한 포인터에 대한 포인터
	//// -ar2 : a pointer to array-of-two=ints
	////		2개의 인트를 가진 배열에 대한 포인터 처럼 간주됨
	///*Pointer and const*/

	//int x = 20;
	//const int y = 23;
	//int* p1 = &x;
	//const int* p2 = &y; // p2자체의 값을 못바꾼다는 것이 아닌 indirection했을때 못바꾼다는 의미
	//const int** pp2 = &p1;

	////p1 =p2;	//Warning (Error)

	////*p2 =123; // Error
	//// p2 = p1;

	//int x2 = 30;
	//int* p3 = &x2;
	//*pp2 = p3;
	//pp2 = &p1;


	return 0;
}

 

 

출처 : 홍정모의 따라배우는 C언어