\ '분류 전체보기' 카테고리의 글 목록 (2 Page) :: Something New
728x90
반응형

2024년 11월7일부터 10일 일요일까지
대한민국 건축,인테리어 용품을 한 자리에서
볼 수 있는 박람회가 학여울역 SETEC에서 개최된다

2024.11.07. (목) ~ 2024.11.10. (일)
시간 10:00 ~ 18:00 (일 17:00)
장소 세텍
요금 -일반 : 10,000원- 중고생 : 5,000원- 단체20인이상 : 5,000원※ 위 요금은 현장 매표 금액이며, 사전등록자는 무료

나는 9웥에 광고를 보고 사전신청은 무료라해서
미리 해놓았다.



https://khfair.com/setec/program/interior-consulting/?ir_cd=SMS@Message@PreRegistration@241031_JJY@intcon_24seoul_info&utm_source=SMS&utm_medium=Message&utm_campaign=PreRegistration&utm_term=241031_JJY&utm_content=intcon_24seoul_info

인테리어 컨설팅관 - 대한민국 대표 건축박람회 서울경향하우징페어

우리 집, 상업 공간 인테리어, 리모델링 고민이라면? 인테리어 전문 브랜드의 무료 공간 컨설팅 받고 고민 해결하세요! 신청만 하면 나에게 딱 맞는 공간을 현실로 구현가능~ 인테리어 컨설팅관

khfair.com

나는 언젠가 내가 살고 싶은 집에 대한 로망이 있고
실용적인 인테리어를 하고 싶어서 방문 예정이지만
실질적인 계획은 없다. 막연한 관심과 흥미가 생겨서 구경가려고 한다.

실제로 컨설팅을 받고싶으신 분은무료컨설팅을 받을 수 있으니 주택이나 인테리어에 관심이 있다면 방문해보는걸 추천한다.


미래에 가게를 낼 계획이 있거나 자가 이사예정이면 미리미리 인테리어를 공부에 놓는 것도 좋을 것 같다.
아는만큼 보이고 전문가가 아니어도 공부가 될거니까

https://khfair.com/setec/

대한민국 대표 건축·전원주택·인테리어 박람회 '서울경향하우징페어'

건축주 특화 건축박람회 '서울경향하우징페어' 지금까지 만나본 적 없었던 다양한 설계·시공사를 만날 수 있는 '서울경향하우징페어'에서 집에 대한 모든 고민을 해결하세요. - 서울, 수원, 광

khfair.com


나는 11월9일 방문예정으로 건축가님들의 세미나 시간표도 확인해놓았다

https://khfair.com/setec/edu-seminar/house_design_seminar_day3/



다들 세미나 시간표도 확인해보시고 7일부터 4일간!
경향하우징페어에 방문해보세요

728x90
728x90
반응형

2024.09.25 - [일상] - [일상]성수 핫플 데이트 코스 1편 서울숲

 

[일상]성수 핫플 데이트 코스 1편 서울숲

몇 달 전에 일본에 있었을 때 같이 회사를 다녔던 친구가 한국에 온다고 연락이 왔다.어디 가고 싶은 곳이 있냐고 물었는데 딱히 없대서;경복궁이나 종각근처 시장등을 얘기했더니 경복궁은 가

ssomethingnew.tistory.com

지난 서울숲편에 이어서 2편은 성수역방향으로 쭉 걸어가며

소품샵, 팝업스토어, 화장품샵 등을 구경할 수 있다.

브레디포스트라는 프레첼 전문점이다.

작은 스티커나 필통, 에코백등 소품을 파는 해피어마트이다.

 

헤이데이라는 인테리어장식판매점도 있다 밖에서 보면 컵이나 그릇들을 판매하고 있다.

포인트오브뷰에서는 펜이나 다이어리등 문구를 판매하고 있는데 걸어다니며 구경하기에 좋다.

 

키링을 DIY해서 자신만의 키링을 만드는 샵도 있다.

 

 

원래는 텅이라는 카페에 가려고 하다가 대림창고라는 카페에 갔는데 창고를 카페로 개조해서 엄청 넓어 자리도 많은데

자리가 없을 정도로 사람이 많다. 빵도 맛있고 인테리어도 특이했다.

일본인 친구가 릴스에서 본 적이 있어서 와보고 싶었다고 좋아했다. 다행,,,ㅎㅎ

 

카페에서 디저트까지 클리어하고 잠실로 이동했다.

보노보노 팝업스토어를 하고 있었는데 일본인 친구는 왜 보노보노를 팝업할 정도로 인기가 있냐는 반응이었닿ㅋㅋㅋㅋ

인기가 있다기 보단 추억의 캐릭터 느낌이긴 했는데 이벤트도 진행하고 있어서 재밌었다.

옷 구경하며 쇼핑도 즐겼다.

석촌호수를 지나서 한국식 고기 구워먹는 곳으로 왔다.

숙수돈가라고 석촌사는 친구에게 추천받은 맛집으로 왔다 

고기가 다 구워져서 나오는 구조라 굉장히 좋았다

아슬하게 웨이팅없이 왔는데 주말 저녁은 거의 만석이었다.

롯데월드도 살짝 보이는 석촌호수를 조금 걷다가 월드타워도 보구 데이트 끝!

 

사실 아침10시부터 거의 밤9시까지ㅎㅎㅎ굉장히 많이 걸었구 알찬 여행이길 바라는 마음에서 빡빡하게 준비했는데

친구에겐 모처럼의 해외여행이니 제대로 만끽하고 가길 바랬다.

친구도 만족하고 가서 정말 다행이었구 넘나 재밌었당

한국에서 좋은 추억을 갖고 돌아가길~

담에 또 보장

本当に楽しかった

ありがとう

また会おうね

728x90
728x90
반응형

몇 달 전에 일본에 있었을 때 같이 회사를 다녔던 친구가 한국에 온다고 연락이 왔다.

어디 가고 싶은 곳이 있냐고 물었는데 딱히 없대서;

경복궁이나 종각근처 시장등을 얘기했더니 경복궁은 가봤다고 했다.

그럼 성수라고 요즘 핫한 곳 있는데 가볼래 해서

릴스로 본 적이 있다고 했다.

그치만 나도 한국에 온 지 얼마 안되었고 성수는 작년인가,,,한 번 가본적이 있는 정도라

주변에 물어보고 검색도 해보며 팝업이라던지,,가게들이 어디 골목에 있는지 찾아보게 되었다.

일단 친구는 간장게장이 먹어보고 싶다고 해서 점심은 한정식집으로 정해놨는데

할머니의 레시피라고 추천을 받아서 가게 되었다.

쌈밥정식과 간장게장정식

할머니의 레시피가 있는 쪽으로 나와서 갤러리아 포레 아파트 가운데를 지나면 서울숲으로 들어갈 수 있는 길이 있다.

이어져있으니 혹시 서울숲으로 갈 예정이면 맵에서 안내하는 길보다 지름길이다.

지나가다 베이크모굴이라는 베이글가게를 들렀는데 빵나오는 시간이 정해져있다.

빵을 데워주기도 하지만 가게에서 먹으려면 음료도 1인1잔해야한다.

캐리커쳐 그리는 곳이 있어서 도토리 캐리커셔샵도 들렸다.

1인 7000원이었구 2인 같이 그리면 19000원이었다.

계좌이체를 했고 작가님은 세분정도 계셨다. 현금이나 계좌이체시 스티커와 엽서를 받을 수 있다.

그림을 받고 포토존도 따로 있으니 거기서 사진도 찍을 수 있게 되어있다.

 

레트르 서울숲에서 향수만들기(40-60분) 비가 온다고 해서 실내활동 할 수 있는 걸 찾아보고 예약해놓았다.

10분전에 와서 QR로 사진을 보내고 위의 설문을 작성한다

 

조금 특별한 향수만들기 였는데 추억의 사진을 보고 뇌파를 측정하면서 

7종류의 향기를 맡아보고 내 선호도를 수치로 나타내서

향들을 조합해서 만드는 것이다. 

-라고 써있는 부분은 뇌파 결과가 불호였던 향기여서 넣지 않는다.

결과물 향수는 매우 맘에 들었다.

금액은 1인 35000원이었고 굉장히 만족스러웠다.

 

그 외에 서울숲 카페거리에서 여러 특별한 건물을 볼 수 있다.

 

 

728x90
728x90
반응형

약 3주전 쯤 쥐롤라의 쇼츠에서 빠져나오지 못하고 

뮤지컬 쇼츠를 많이 보았는데

친구랑 쥐롤라 얘기를 하다가

킹키부츠 예매까지 이어졌다.

당연히 이미 예매가 시작된 후 였기 때문에 남은 자리인 3층 가운데 좌석에 앉게 되었다.

저녁으로 이태원에서 러시아 음식점에 갔는데

음식점 평은 좋았는데 메뉴 선택이 살짝 아쉬웠다. 둘다 감자와 고기의 조합,,

터키 디저트 집에서 샌드 에스프레소 마셔봤다

디저트로 콜드 바카리랑 잘 어울렸다.

바카리는 처음 먹어봤는데 눅눅한 페스츄리 느낌의 달콤한 디저트였다.

에스프레소는 생각보다는 엄청 쓰진 않았다.

버스를 타고 한강진역, 블루스퀘어로 이동했다.

이태원에서 옷을 구매해서 짐이 많았는데 블루스퀘어에서 물품을 보관할 수 있다.

우선 실물 티켓을 끊어야하고 1층에서 두개층 밑으로 내려가면 물품보관소가 있다.

연락처와 이름 어떤 품목인지 간단히 작성하면 번호키를 준다.

공연이 끝나고 15분 밖에 하지 않는다고 하니 바로 찾으러 가는 것이 좋을 것 같다.

킹키부츠 관련 굿즈들이나 여러 포토스팟을 층마다 잘 꾸며놨다.

줄서서 찍어야하니,,, 미리가서 여러 포토스팟에서 사진 남기는 것도 좋을 듯

인생네컷 킹키프레임으로 있었다

앞자리가 아니면 오페라글라스도 괜찮을 것 같다

최소 한시간 전에는 가야지 4000원에 대여가 가능한데 

대여는 제일 위층에서 가능하다.

근데 쿠팡에서 만이천원정도 하는걸 보니 사는 것도 좋을 것 같다.

다음엔 앞자리도 앉아보고 싶지만

티켓팅은 자신이 없다...ㅎ

배우들 얼굴 표정까지는 안보였지만

귀가 찢어질 듯한 음악소리는 들린다.

롤라씬을 실제로 보니 갬동,,,

이석훈 배우의 찰리역은 정말 끊임없이 나와서 대단하다고 느꼈다

킹키부츠의 줄거리는

영국 신발 공장의 아들 찰리가 아버지가 돌아가시면서 신발 공장을 일으키기 위해 고군분투하는 내용인데

근처 신발공장들의 상황이 다 안좋아지자 틈새시장을 노리게 되고

드랙퀸은 롤라의 신발은 남자가 신기에는 힐이 너무 높고 약하니 부츠를 만들어 줄 제안을 한다.

그러나 디자인 감각이 떨어지는 찰리는 롤라에게 디자인을 맡기게되고

밀라노 패션쇼에 출품하기까지의 과정을 담았다.

 

 

뮤지컬은 라이브에서 오는 도파민이 남달랐다.

멋진 연기,,,감동 그 자체,,

다들 멋찌다,,

 

728x90
728x90
반응형

스택이란 먼저 들어간 것이 마지막에 나오는 규칙

선입후출 FILO first In Last Out

스택의 ADT

boolean isFull()  : 스택에 들어 있는 데이터 개수가 maxsize인지 확인해 boolean값을 반환합니다. 가득 차 있다면 True,아니면 False

boolean isEmpty()  : 스택에 들어있는 데이터가 하나도 없는지 확인해 boolean값을 반환. 데이터가 하나도 없으면 True, 있으면  False

 void push(ItemType item) : 스택에 데이터를 푸시합니다.

ItemType pop() : 스택에서 최근에 푸시한 데이터를 팝하고, 그 데이터를 반환합니다.

Int top :스택에서 최근에 push한 데이터의 위치를 기록

ItemType data[maxsize] : 스택의 데이터를 관리하는 배열입니다. 최대 maxsize개의 데이터를 관리합니다.

push()를 하고 나서는 isFull()해서 데이터가 찼는지 확인하고

pop()를 하고 나서는 isEmpty()해서 데이터가 비어있는지 확인

실제로는 max_size(),isFull()은 사용하지 않고 isEmpty()함수는 len(stack)==0으로 검사합니다.

stack = [] #스택 리스트 초기화

def push(stack,item):
	#스택에 데이터를 추가하는 함수
    stack.append(item)
    print("데이터가 추가되었습니다")
    
def pop(stack):
	#스택에서 아이템을 꺼내는 함수
    if len(stack) ==0 :
    	print("스택이 비어 있습니다")
        return None
    else:
    	return stack.pop()

 

728x90
728x90
반응형

추석 전 금요일은 3시 퇴근으로 일찍 퇴근하게 되었다.

6시 반 친구네 집에서 다같이 모이기로 약속한 날~

친구네는 문래역이었는데

4시전에 도착해버려서 역앞 홈플에 가게되었다.

문래 홈플에 니토리가 있었다.

일본에서 값싸고 질은 괜찮아서 자주 애용한 브랜드였다.

거의 자취템을 니토리로 통일한 수준이었는뎅ㅎㅎ

입점한건 알았는데 생각보다 컸고 완전 추억돋았음

집들이 선물로 크램드 카시스를 사가지고 친구네로 갔다

청소를 살짝쿵 해주고 넷플보며 기다리니 친구들이 하나 둘 씩 모였다

고딩친구들이라 아직도 그때로 돌아가는 것 만 같은 기분이 들었다

다같이 떡볶이 먹구 요아정 먹구 칵테일을 만들어 마셨다ㅎㅎ

크램드 카시스는 크랜베리맛이었구 

오렌지 주스랑 섞으면 달달하고 맛있었당

하나 둘씩 집에 돌아가고 

근처 사는 친구만 남아 늦게까지 놀다 2일차를 기약,,,

~~~~~~~2일차~~~~~~~

봄이보리밥에서 보리밥 + 오리고기 먹었는데

새삼 한식은 정말 진수성찬이었지 깨닫게해준다.

일본에서 살다와서 그런건가 음식 남는게 좀 아까웠다 ㅠㅠ

드라이브로 팔당까지 친구가 운전해줬다. 

남양주에 있는 라온숨 카페에서 힐링

주말 연휴의 여유로움 그 자체..!

조금 배가 불러 산책을 하고

저녁으로 북한강 막국수 닭갈비에서 숯불 닭갈비를 먹었다.

알찬 추석전야제 해피 추석~!

 

 

728x90
728x90
반응형

포인터의 기본 개념

  • 포인터: 메모리 주소를 저장하는 변수입니다.
  • * (간접 참조 연산자): 포인터가 가리키는 주소의 값을 가져옵니다.
  • & (주소 연산자): 변수의 메모리 주소를 가져옵니다.

코드 설명

  1. ChangeDouble 함수
    • int* p: p는 int형 포인터입니다. 즉, p는 int형 변수의 주소를 가리킵니다.
    • p = *p * *p;: 포인터 p가 가리키는 메모리 주소의 값을 제곱합니다. 여기서 p는 포인터가 가리키는 변수의 실제 값입니다.
void ChangeDouble(int* p) { *p = *p * *p; }
  1.  main 함수
    • scanf("%d", &num);: 사용자가 입력한 값을 변수 num에 저장합니다. 여기서 &num은 num 변수의 메모리 주소를 의미합니다.
    • ChangeDouble(&num);: ChangeDouble 함수에 num 변수의 주소를 전달합니다. 즉, &num은 num의 주소를 전달합니다.
    • ChangeDouble 함수에서 p = *p * *p;가 실행되면서, num 변수의 값이 제곱됩니다.
 int main() { 
     int num; 
     printf("숫자를 입력하시오 : "); 
     scanf("%d", &num); ChangeDouble(&num); 
     printf("제곱 : %d\\n", num); 
     return 0; 
 }

정리

  • &: 변수의 주소를 얻기 위해 사용합니다.
  • *: 포인터가 가리키는 주소의 값을 참조하거나 수정하기 위해 사용합니다.

Q.3을 입력했을 때 changeDouble에 3이 들어가는게 아니고 3의 메모리 주소를 가져간거인가?

A.ChangeDouble 함수에는 3 자체가 아니라 3이 저장된 메모리 주소가 전달됩니다. 이 과정을 다시 설명하자면:

  1. num에 3을 입력하면, num이라는 변수에 3이라는 값이 저장됩니다. 예를 들어, num이 메모리의 0x1000이라는 주소에 저장되어 있다고 가정할 수 있습니다.
  2. ChangeDouble(&num)을 호출할 때, &num은 num의 메모리 주소(예를 들어 0x1000)를 전달합니다. 따라서 ChangeDouble 함수는 num 변수가 저장된 메모리 위치를 알게 됩니다.
  3. ChangeDouble 함수의 매개변수는 포인터(int* p)입니다. 이 포인터 p는 num의 메모리 주소를 가리키고 있으므로, p는 num의 값을 참조할 수 있습니다.
  4. p = *p * *p;에서 p는 p가 가리키는 메모리 주소에 있는 값을 의미하므로, 이는 num의 값을 의미합니다. 따라서 num의 값이   3 * 3 = 9로 변경됩니다.

즉, ChangeDouble에 들어가는 것은 3 자체가 아닌 num의 주소이며, 그 주소를 통해 함수 내부에서 num의 실제 값을 제곱하고 변경할 수 있는 것입니다.

Q.리턴을 안해줘도 ChangeDouble(&num);이것만으로 3을 입력했을 때 어떻게 *P값이 나와?

A.ChangeDouble(&num);만으로도 num의 값이 변경되는 이유는 포인터의 특성 덕분입니다. 이 과정에서 중요한 것은, 함수가 직접 메모리 주소에 접근해서 값을 수정한다는 점입니다.

함수를 호출할 때 일반적으로 값만 복사되어 전달되는데, 포인터를 사용하면 원본 데이터를 직접 수정할 수 있습니다. 이 과정을 단계별로 설명드릴게요.

기본 개념: 값 복사 vs. 주소 전달

  • 값 복사: 함수에 변수를 넘기면 그 변수의 값만 복사됩니다. 원래 변수는 바뀌지 않습니다.
  • 주소 전달: 포인터를 사용해 변수의 주소를 넘기면, 함수에서 원래 변수의 값을 수정할 수 있습니다.

ChangeDouble 함수가 원본 값을 바꾸는 이유

  1. ChangeDouble(&num)에서 &num은 num의 메모리 주소를 나타냅니다.
    • 예를 들어, num의 주소가 0x1000이라고 가정하면, &num은 0x1000입니다.
  2. ChangeDouble 함수는 이 주소를 받아서, 그 주소를 가리키는 포인터 p로 처리합니다.
    • p는 num의 주소를 가리키므로, p는 num이 저장된 메모리 위치의 값을 나타냅니다.
    • p = *p * *p;는 p가 가리키는 값, 즉 num의 값을 제곱하는 연산을 수행합니다.
  3. void ChangeDouble(int* p) { *p = *p * *p; }
  4. 따라서 ChangeDouble 함수는 num 변수의 실제 메모리 위치에 접근하여 그 값을 직접 수정하게 됩니다.

리턴이 필요 없는 이유

일반적인 함수는 값을 반환할 때 리턴을 사용하지만, 여기서는 포인터를 사용하여 변수의 메모리 주소에 접근해 값을 변경하기 때문에 리턴 값이 필요 없습니다. 함수가 종료되어도, 수정된 값은 메모리에 그대로 남아있으므로 main 함수에서 num의 값이 바뀐 것을 볼 수 있습니다.

간단한 예시:

void ChangeDouble(int* p) {
    *p = *p * *p;  // 주소를 통해 값을 직접 수정
}

여기서 중요한 점은, ChangeDouble 함수가 num의 값을 직접 수정하기 때문에 함수 호출 후에도 num의 값이 제곱된 상태로 남아있다는 것입니다. 따라서 리턴 없이도 값이 바뀝니다.

정리하자면:

  • 포인터를 통해 변수의 메모리 주소에 직접 접근해서 값을 변경하기 때문에, 함수가 리턴하지 않아도 num의 값이 바뀌는 것입니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int num;
    int* numP = &num;// int num의 주소를 가리키도록
    printf("숫자를 입력하시오 : ");
    scanf_s("%d", &num); /*&num은 num의 변수 주소*/
    printf("num : %d\n*numP : %d\n\n", num, *numP); // 내용 가져옴 
    printf("&num : %d\nnumP : %d\n\n", &num, numP); //주소 가져옴

Q.여기에서 num의 값을 numP포인터에 넣었다는건 numP에 num의 주소값이 들어가는 거야?

A.네, 맞습니다! numP 포인터에 num의 주소값이 들어가는 것입니다. 이 부분을 좀 더 자세히 설명드릴게요.

int num;
int* numP = &num;  // num의 주소를 numP 포인터에 저장

  1. int num;: num이라는 정수형 변수를 선언합니다. 이 변수는 메모리의 어떤 위치에 값을 저장하게 됩니다.
  2. int* numP = &num;:
    • int* numP는 num이라는 정수형 변수의 주소를 저장할 수 있는 포인터입니다.
    • &num은 num 변수의 메모리 주소를 의미합니다.
    • 이 문장은 numP라는 포인터 변수에 num의 메모리 주소를 저장하는 작업입니다. 즉, numP는 num이 저장된 위치를 가리킵니다.

요약:

  • *numP*는 num의 주소를 가리키고 있습니다. 즉, num이 메모리에서 어디에 저장되어 있는지 그 주소값을 numP가 저장합니다.
  • *numP*는 numP가 가리키는 주소에 있는 을 의미합니다. 즉, numP는 num의 값과 동일한 값을 가리키게 됩니다.

출력 예시:

printf("num : %d\\n*numP : %d\\n\\n", num, *numP);

  • num은 num 변수의 값을 출력합니다.
  • numP는 numP가 가리키는 주소에 저장된 값을 출력하는데, 이는 num과 동일합니다.
printf("&num : %d\\nnumP : %d\\n\\n", &num, numP);

  • &num은 num 변수의 메모리 주소를 출력합니다.
  • numP도 동일하게 num의 메모리 주소를 가리키고 있으므로, &num과 numP는 같은 값을 출력합니다.

결론:

  • numP에 num의 주소값이 들어간다는 것은, numP가 이제 num이 저장된 메모리 위치를 가리키고 있다는 뜻입니다.
  • numP를 통해 num의 값을 접근할 수 있습니다.

 

Q.int* numP라고 선언했잖아 그럼 numP야? 아님 *numP야? printf에서 사용하고 싶으면 어떻게 써야해?

A.int* numP 선언에서 numP와 *numP의 차이점과 각각을 어떻게 사용해야 하는지 설명해드릴게요.

1. int* numP 선언

  • int* numP: 여기서 numP는 포인터 변수입니다. 즉, 정수형 값을 저장하는 변수가 아니라, 정수형 변수가 저장된 메모리 주소를 저장하는 변수입니다.
  • numP: 포인터 변수 numP가 가리키고 있는 주소에 저장된 값을 참조할 때 사용합니다.

2. numP와 * numP의 차이

  • numP: num 변수의 주소를 가리키는 포인터입니다. 즉, numP에는 num의 메모리 주소가 저장됩니다.
  • * numP: numP가 가리키는 주소에 저장된 값을 나타냅니다. 즉, * numP는 num의 값을 의미합니다.

3. printf에서 사용법

  • numP: 메모리 주소를 출력할 때 사용합니다.numP는 num이 저장된 주소를 가지고 있기 때문에, printf에서 주소값을 출력하려면 %p 형식을 사용해야 합니다.
  • printf("numP : %p\\n", numP); // %p는 포인터 주소를 출력하는 포맷
  • * numP: 포인터가 가리키는 을 출력할 때 사용합니다.
    • * numP는 numP가 가리키는 주소의 값을 의미합니다. 즉, num의 값과 동일한 값을 출력하게 됩니다.
  • printf("*numP : %d\\n", *numP); // %d는 정수 값을 출력하는 포맷

코드 예시

#include <stdio.h>int main() {
    int num = 10;
    int* numP = &num;  // num의 주소를 numP에 저장

    printf("num : %d\\n", num);          // num의 값 출력
    printf("*numP : %d\\n", *numP);      // numP가 가리키는 값 출력
    printf("numP : %p\\n", numP);        // numP, 즉 num의 주소 출력
    printf("&num : %p\\n", &num);        // num의 주소 출력 (numP와 동일)

    return 0;
}

출력 결과:

num : 10
*numP : 10
numP : 0x7ffee6b1a658  // (주소값은 시스템에 따라 다름)
&num : 0x7ffee6b1a658  // numP와 동일한 주소 출력

요약

  • *numP*는 주소를 출력할 때 사용합니다. (%p)
  • *numP*는 그 주소에 저장된 을 출력할 때 사용합니다. (%d)
  • 포인터 변수와 그 값에 접근하는 방법을 정확히 구분하는 것이 중요합니다!

 

Q.그러면 그냥 numP로 선언하고 주소를 사용하고 싶을때 &numP로 사용하면 안돼?

A.먼저 포인터 변수일반 변수의 개념을 정확히 이해하는 것이 중요합니다. 각각의 역할이 다르기 때문에, 단순히 numP로 선언하고 &numP를 사용하려는 시도는 잘못된 방식입니다. 그 이유를 설명드리겠습니다.

1. 포인터와 일반 변수의 차이

  • 포인터 변수다른 변수의 주소를 저장하는 변수입니다. 예를 들어, int* numP;는 정수형 변수를 가리킬 수 있는 포인터를 선언하는 것입니다.
  • 일반 변수는 값을 직접 저장합니다. 예를 들어, int num;는 정수 값을 저장하는 변수입니다.

2. & 연산자와 포인터의 역할

  • & 연산자: 어떤 변수 앞에 붙이면 그 변수의 주소를 반환합니다.
    • 예: &num은 num 변수의 메모리 주소를 반환합니다.
  • 포인터 변수: 다른 변수의 주소를 저장하는 역할을 합니다.
    • 예: int* numP = &num;는 num의 주소를 numP에 저장합니다.

3. 왜 &numP를 사용하면 안 되는가?

numP를 그냥 일반 변수처럼 선언하고 &numP를 사용하려면, numP는 포인터가 아닌 일반 변수가 되어야 합니다. 그러나 이 경우, numP에는 주소를 저장할 수 없고, 주소를 참조할 수 있는 능력도 없습니다.

  • numP가 포인터가 아닌 경우: numP는 주소를 가리키지 않고, 단순히 정수 같은 값을 저장하는 일반 변수가 됩니다.
    • 예를 들어, int numP;로 선언한다면 numP는 정수값을 저장하는 일반 변수가 됩니다. 이때 &numP는 numP 자신의 주소를 반환할 뿐, 다른 변수의 주소와는 아무 관련이 없습니다.

4. 올바른 방법: 포인터 변수로 선언

주소를 다루고 싶다면, 포인터 변수를 사용해야 합니다. 즉, numP를 포인터로 선언해야만 num과 같은 다른 변수의 주소를 저장하고 이를 활용할 수 있습니다.

int num;
int* numP = &num;  // num의 주소를 numP에 저장
  • *numP*는 이제 num의 주소를 가리키는 포인터입니다.
  • *&numP*를 사용하면, numP 자신의 주소를 반환하게 됩니다. 이는 num의 주소와는 전혀 다른 값입니다.

정리

  • 포인터 변수다른 변수의 주소를 저장할 수 있도록 선언해야 합니다. (int* numP;)
  • & 연산자변수의 주소를 반환하지만, 포인터가 아닌 변수에는 주소를 저장할 수 없습니다.
  • *&numP*를 사용하면, numP 자체의 주소를 반환하게 되므로, 원하는 주소(num의 주소)와는 다릅니다.

따라서, 다른 변수의 주소를 저장하려면 반드시 포인터 변수로 선언하고, 그 포인터를 통해 주소를 다루는 것이 맞습니다.

Q.그럼 포인터 변수를 사용할 때는 항상 일반변수를 선언하고 그 주소를 저장해줘야해?

A.포인터 변수를 사용할 때 항상 일반 변수를 선언하고 그 주소를 저장해야 하는 것은 아닙니다, 하지만 일반적으로 그렇게 사용하는 경우가 많습니다. 포인터는 다양한 상황에서 활용될 수 있기 때문에, 일반 변수의 주소를 저장하는 것 외에도 여러 방식으로 사용할 수 있습니다.

1. 포인터의 일반적인 사용: 일반 변수의 주소 저장

포인터를 가장 많이 사용하는 경우는 일반 변수의 주소를 저장하는 상황입니다. 이때, 일반 변수를 선언하고 그 주소를 포인터에 저장하여 사용합니다.

예시:

int num = 10;     // 일반 변수 선언
int* numP = &num; // num의 주소를 포인터에 저장

이 방법은 다른 함수에서 값을 수정하거나 메모리를 효율적으로 다루기 위해 많이 사용됩니다.

2. 포인터만 선언하고 나중에 메모리 할당

포인터는 선언만 하고 나중에 메모리를 동적으로 할당할 수 있습니다. 이 경우에는 일반 변수를 선언하지 않고 포인터가 가리킬 메모리를 직접 할당할 수 있습니다.

예시: 동적 메모리 할당

int* numP;
numP = (int*)malloc(sizeof(int)); // 동적으로 메모리 할당
*numP = 20;                       // 포인터가 가리키는 메모리에 값 저장

위 예시에서는 malloc 함수로 메모리를 동적으로 할당하고, 그 메모리의 주소를 numP에 저장합니다. 이렇게 하면 일반 변수를 선언할 필요 없이 포인터가 직접 메모리 공간을 가리킬 수 있습니다.

3. 배열과 포인터

포인터는 배열을 가리키는 데도 자주 사용됩니다. 배열 이름 자체가 배열의 첫 번째 요소의 주소를 나타내기 때문에 포인터와 배열은 밀접하게 연관되어 있습니다.

예시: 배열을 가리키는 포인터

int arr[5] = {1, 2, 3, 4, 5};
int* p = arr; // 배열의 첫 번째 요소의 주소를 가리킴
printf("%d\\n", *p); // 1 출력

배열 이름은 첫 번째 요소의 주소를 나타내므로, p = arr;는 p = &arr[0];와 동일한 효과를 가집니다. 배열의 주소를 저장하는 데도 일반 변수를 선언할 필요가 없습니다.

4. 함수와 포인터

함수 매개변수로 포인터를 사용할 때도 일반 변수를 포인터로 전달하여 값이나 주소를 다룰 수 있습니다. 하지만 경우에 따라 포인터만 전달하고 그 포인터가 가리킬 값을 함수 안에서 생성할 수 있습니다.

예시: 포인터를 통해 함수 내에서 값 설정

 
void set_value(int* p) {
    *p = 100; // 포인터가 가리키는 메모리 주소에 값을 저장
}

int main() {
    int num;
    set_value(&num); // num의 주소를 함수에 전달
    printf("%d\\n", num); // 100 출력
}

결론:

  • 일반 변수를 선언하고 그 주소를 포인터에 저장하는 것은 매우 일반적인 사용 방식입니다.
  • 그러나 포인터는 동적 메모리 할당, 배열 처리, 함수 인자 전달 등 다양한 방식으로 사용할 수 있으며, 일반 변수를 선언하지 않고도 사용할 수 있는 경우가 많습니다.
  • 동적 메모리 할당을 통해 직접 메모리 공간을 관리하거나, 배열을 가리키는 포인터로 활용할 수 있습니다.

Q.주소값을 바꿀수도 있어?

A.포인터가 가리키는 주소값은 변경할 수 있습니다. 하지만 중요한 것은 포인터가 가리키는 대상의 주소를 바꾸는 것이지, 실제 메모리 주소 자체를 바꾸는 것은 아닙니다. 포인터는 변수처럼 다른 메모리 위치를 가리킬 수 있습니다. 즉, 포인터가 가리키는 주소값을 변경해서 다른 변수를 가리키게 할 수 있습니다.

1. 포인터가 가리키는 주소값을 바꾸는 예시

포인터는 선언된 후, 다른 변수나 메모리의 주소를 가리키도록 변경할 수 있습니다.

 
#include <stdio.h>int main() {
    int num1 = 10;
    int num2 = 20;

    int* p = &num1; // 포인터 p가 num1의 주소를 가리킴
    printf("p가 가리키는 값: %d\\n", *p);  // 10 출력

    p = &num2; // 포인터 p가 num2의 주소로 변경됨
    printf("p가 가리키는 값: %d\\n", *p);  // 20 출력

    return 0;
}

설명:

  1. 처음에 포인터 p는 num1의 주소를 가리키고 있습니다. 그래서 p는 num1의 값인 10을 출력합니다.
  2. 그 후, p가 num2의 주소를 가리키도록 바꿨습니다. 이제 p는 num2의 값인 20을 출력합니다.

이처럼 포인터가 가리키는 주소값은 언제든지 변경할 수 있습니다. 이 경우, 메모리 주소 자체는 변하지 않고, 포인터가 가리키는 주소만 변경됩니다.

2. 동적 메모리 할당과 포인터 주소 변경

동적 메모리 할당 시에도 포인터가 가리키는 메모리 주소를 바꿀 수 있습니다.

 
#include <stdio.h>
#include <stdlib.h>
int main() {
    int* p = (int*)malloc(sizeof(int)); // 메모리 할당
    *p = 30; // p가 가리키는 메모리에 30 저장
    printf("p가 가리키는 값: %d\\n", *p);  // 30 출력

    free(p); // 할당된 메모리 해제

    // 다른 메모리 할당
    p = (int*)malloc(sizeof(int));
    *p = 40; // 새로운 메모리에 40 저장
    printf("p가 가리키는 값: %d\\n", *p);  // 40 출력

    free(p); // 메모리 해제
    return 0;
}

설명:

  • 처음에 malloc을 사용해 메모리를 할당하고, 포인터 p는 그 메모리 주소를 가리킵니다. 이후 할당된 메모리에 30을 저장합니다.
  • 메모리를 해제한 후, 새로운 메모리를 할당하고, 포인터 p는 새로운 메모리 주소를 가리키게 됩니다.

3. 포인터가 가리키는 주소를 바꿀 수 있지만, 주소 자체는 바꿀 수 없다

포인터는 다른 변수나 메모리 주소를 가리키도록 변경할 수 있습니다. 그러나 실제 메모리 주소 자체는 운영체제에 의해 할당된 것이므로 프로그램에서 변경할 수 없습니다. 프로그램에서는 포인터가 어디를 가리킬지를 제어할 수 있을 뿐, 메모리 주소 자체를 임의로 바꿀 수는 없습니다.

결론:

  • 포인터가 가리키는 주소값은 자유롭게 바꿀 수 있습니다. 포인터가 다른 변수를 가리키게 하거나, 동적 메모리 할당으로 새로운 메모리 주소를 가리킬 수 있습니다.
  • 하지만 메모리 주소 자체는 변경할 수 없습니다. 운영체제가 메모리 주소를 할당하며, 프로그래머는 그 주소를 활용할 수 있을 뿐입니다.

Q.포인터 변수 p가 있는데 *p에 값을 넣는거랑 p에 값을 넣는거랑 어떻게 달라?

A.포인터 변수 p와 포인터를 통해 참조하는 값 *p는 서로 다른 개념이므로, p에 값을 넣는 것*p에 값을 넣는 것은 전혀 다른 결과를 가져옵니다.

1. p에 값을 넣는 경우:

  • p는 메모리 주소를 저장하는 변수입니다. 따라서 p에 값을 넣는다는 것은 p가 가리킬 메모리 주소를 설정하는 것입니다. 즉, p가 가리키는 위치가 바뀝니다.

예시:

 
int num1 = 10;
int num2 = 20;
int* p = &num1; // p가 num1의 주소를 가리킴

printf("p가 가리키는 주소: %p\\n", p);  // p의 값 (num1의 주소)
p = &num2; // p가 num2의 주소를 가리키게 변경됨
printf("p가 가리키는 주소: %p\\n", p);  // p의 값 (num2의 주소)

설명:

  • 처음에 p는 num1의 주소를 가리키고 있었지만, p = &num2;를 통해 num2의 주소를 가리키게 변경되었습니다. p에 새로운 값을 넣으면, 포인터가 가리키는 주소가 바뀝니다.

2. p에 값을 넣는 경우:

  • p는 포인터가 가리키는 메모리 주소에 저장된 값을 의미합니다. 따라서 p에 값을 넣는다는 것은 포인터가 가리키는 메모리 공간에 새로운 값을 저장하는 것입니다. 포인터가 가리키는 주소의 값이 변경됩니다.

예시:

 
int num = 10;
int* p = &num;  // p는 num의 주소를 가리킴

printf("num의 값: %d\\n", num);  // num의 값은 10
*p = 20;  // p가 가리키는 주소에 20을 저장 (즉, num의 값이 20으로 변경됨)
printf("num의 값: %d\\n", num);  // num의 값은 20

설명:

  • 처음에 num은 10이었지만, p = 20;을 통해 p가 가리키는 num의 값을 20으로 변경했습니다. p는 포인터가 가리키는 값에 접근하는 것이므로, 해당 값이 바뀝니다.

3. 요약:

  • p = 주소값: 포인터 p가 가리키는 주소를 변경합니다. 즉, 포인터가 다른 변수를 가리키게 합니다.
  • p = 값: 포인터 p가 가리키는 주소에 저장된 값을 변경합니다. 즉, 포인터가 가리키는 메모리 공간에 새로운 값을 저장합니다.

전체 예시 코드:

 
#include <stdio.h>int main() {
    int num1 = 10;
    int num2 = 20;
    int* p = &num1;  // p는 num1의 주소를 가리킴

    printf("num1: %d, num2: %d\\n", num1, num2);  // num1: 10, num2: 20
    printf("p가 가리키는 값: %d\\n", *p);  // p가 가리키는 값: 10

    *p = 30;  // p가 가리키는 num1의 값을 30으로 변경
    printf("num1: %d, num2: %d\\n", num1, num2);  // num1: 30, num2: 20

    p = &num2;  // p가 이제 num2의 주소를 가리키도록 변경
    printf("p가 가리키는 값: %d\\n", *p);  // p가 가리키는 값: 20

    *p = 40;  // p가 가리키는 num2의 값을 40으로 변경
    printf("num1: %d, num2: %d\\n", num1, num2);  // num1: 30, num2: 40

    return 0;
}

결과:

num1: 10, num2: 20
p가 가리키는 값: 10
num1: 30, num2: 20
p가 가리키는 값: 20
num1: 30, num2: 40

결론:

  • *p = 주소값*은 포인터가 가리키는 주소를 바꾸는 것이고,
  • *p = 값*은 포인터가 가리키는 주소에 저장된 값을 바꾸는 것입니다.

 

이해가 잘 되지 않는다면 c언어에만 있는 메모리 구조에 대해 이해해야 하는데 

엑셀에서 주소를 지정하는 개념이라고 생각하면 쉽다.

 

위의 상황에서  *p=20을 넣으면 단순히 num 이 지워지고  20이 되는게 아닌 점에서

내가 이해하지 못한 점이 었는데 이건 엑셀을 생각하면 조금 이해가 된다

A1이 num인거고 B2가 p인건데 *p에 값을 넣는 다는 것 자체가 A1에 값을 넣는 것과 같으므로

num역시 20으로 바뀐거라고 이해했다.

 

 

c언어가 정보처리기사 실기에서 자바와 함께 3-4문제가 출제된다고 한다. 파이썬은 1-2문항

물론 포인터 *이니 &를 보는 순간부터 어질,,,ㅎ해 하기보단 차근차근 이해해나가면 해볼만 하다.

 

728x90
728x90
반응형

상암mbc 사옥 앞에서 농부의 시장이 열렸다. 6월 말에도 했던 것 같은데 이번엔 추석특별전으로 열렸다.

24년 9월 10일 부터 12일까지

오전 10시 부터 오후 6시까지 판매하고 있다.

나는 냉동 곶감을 구입했는데 반건조라고 해서 안에는 아이스 홍시 느낌이고 겉은 곶감 식감이었다.

한 팩에 10개정도 만오천원 정도 했다. 맛은 달고 맛있었다 그런데 곶감보단 홍시 느낌으로 구매하는게 좋을 것 같다.

떡, 과일, 된장, 꿀 등 다양한 지역 농산물을 판매하고 있다

728x90

+ Recent posts