코딩/C언어

문제024_포인터와이차배열 ~ 문제024_포인터와이차배열07

tree0505 2025. 7. 10. 10:35
반응형
    • _21_문제

  • 문제024_포인터와이차배열.cpp
#include <stdio.h>
#include <stdlib.h> // srand();
#include <time.h> // time(NULL)

int main(void) {
	int data[][3] = {1, 3, 4, 5, 2, 9, 6, 8, 7};

	//data[3][3] = {{1,3,4},{5,2,9},{6,8,7}};


	int *p = data[1]; //5의 주소를 줌 //&data[1][0] 원형 //x13주소

	int x, y;
	x = *p; //5
	y = *(p + 2); //9
	printf("%d %d\n" , x , y);

	return 0;
}

  • 문제024_포인터와이차배열02.cpp
#include <stdio.h>

int main(void) {
	int data[3][3] = {{10,20,30},{40,50,60},{70,80,90}};
	int sum1, sum2;

	/*
		*data => data[0] =>{10,20,30} 아직까지 이것 . 한 줄 
		(*data + 1) => 20 
	*/
	int n = *(*data + 1); // (*data) => 20 
	//data[0][0] + 1 => data[0][1] => 20 

	int n2 = *(*data + 2); // 30 

	int n3 = *data[1]; // 40
	//data[1]의 *(별) // {40,50,60} 

	int n4 = *data[2];	//70 
	
	sum1 = n + n2; // 50 
	sum2 = n3 + n4; // 110 
	
	printf("%d\n", n);
	printf("%d\n", n2);
	printf("%d\n", n3);
	printf("%d\n", n4);
	printf("%d %d\n" , sum1 , sum2);

	return 0;
}

  • 문제024_포인터와이차배열03.cpp
#include <stdio.h>

int main(void) {
	int data[2][3] = {{10,20,30},{40,50,60}};


	printf("%p\n", data);  //x1
	//data를 해도 {10,20,30}의 10의 주소가 나온다. //x1 

	printf("%p\n", &data); //x1
	//똑같이 x1의 주소가 나온다. 10의 주소 

	printf("%p\n", data[0]); //x1

	printf("%p\n", *data); //x1

	//위의 4개는 전부 x1의 주소가 나오는것이다. 
	//----------------------------------------------
	printf("%p\n", &data[0][0]); //x1 

	printf("%p\n", data + 1); //x13 
	//data + 1 => {10,20,30}의 크기만큼 이동함 
	//----------------------------------------------
	printf("%d\n", &data + 1); //60 //x21 

	printf("%d\n", data[0] + 1); //x5
	//20의 주소 

	printf("%p\n", *data + 1); //x5

	printf("%p\n", &data[0][0] + 1); //x5
	return 0;
}

  • 문제024_포인터와이차배열04.cpp
#include <stdio.h>

int main(void) {
	static char *c[] = {"aaa" , "bbb" , "ccc"};
	
	/*
	char * c1 = "aaa";
	char * c2 = "bbb";
	char * c3 = "ccc"; 
	//위의 3개를 배열로 만든것 
	char * carr[3] = {"aaa" , "bbb" , "ccc"};
	//carr[3][4]; 
	*/

	printf("%s\n" , *(c + 1)); //bbb 
	return 0;
}

  • 문제024_포인터와이차배열05.cpp
#include <stdio.h>

int main(void) {
	char* array1[2] = {
		"Good morning" , "C language"
	};

	char * a1[] = "Good morning";
	char * a2[] = "C language";

	char * arrayArr[2] = {"Good morning" , "C language"}

	printf("%s\n", array1[0] +  5); //morning
	printf("%s\n", array1[1] + 6); //uage
	return 0;
}

  • 문제024_포인터와이차배열06.cpp
#include <stdio.h>

int main(void) {
	int a[2][3] = {{-3, 14, 5},{1, -10, 8}};
	
	int *b[] = {a[0], a[1]};

	int *p = b[1]; // a[1] 의 주소  //1의 주소 //p = {1, -10, 8}

	printf("%d\n" , *b[1]); //1  
	//*b[1] => b1의 값 

	printf("%d\n" , *(++p)); //-10 

	printf("%d\n" , *(--p-2)); //14
	
	return 0;
}

  • 문제024_포인터와이차배열07.cpp
#include <stdio.h>
#include <stdlib.h>

int main(void) {
	// 심화 pass
	int arr[2][3] = {10, 20, 30, 40, 50, 60};

	int(*p)[3] = NULL;

	p = arr; //{{10, 20, 30}, {40, 50, 60}}

	printf("%d\n" , *(p[0] + 1)); //20 
	printf("%d\n" , *(p[1] + 2)); //60 
	printf("%d\n" , *(*(p + 1) + 0)); //40
	printf("%d\n" , *(*(p + 1) + 1)); //50

	return 0;
}

  •  
반응형