다시 오신 걸 환영해요
이 강의에서 그 도전에 대한 해결책을 제시하고 싶군요
네 구조 내부의 요소로서 포인터를 갖는 방법과 포인터 2
함수를 전달하는 방법에 대한 데모를 보여드리겠습니다
코드블록을 불러오고 새 프로젝트를 만들죠
네 이건 콘솔 응용 프로그램이고 이 구조 이름을
포인터 예제로 하겠습니다
네 그래서 기억하신다면 이것의
요구 사항은 기본적으로 제품 유형 구조로 아이템 이름과 수량 가격과
금액을 저장하죠
아이템 이름은 캐릭터 포인터가 될 거예요
애너마운트는 가격을 곱한
거예요
그리고 두 가지 기능이 있는데 구조를 위한 매개
변수 포인터예요
가장 먼저 할 일은 구조를
만드는 거예요
그리고 아까도 말씀드렸는데요 구조는 전 세계적으로
만드는 게 좋아요 다중 기능에 사용하고 싶다면
구조를 만드는 건 아주 구체적이죠
기억이 할당되지 않아요
세계적으로 해가 될 건 없죠
보통은 헤더 파일로 들어가죠
구조를 만들기 위해 그냥 구조를 만들라고 하죠
이 아이템을 호출하고 4가지 요소를 갖게 될 거예요
우리는 캐릭터 포인터를 가지고 아이템 이름을
불러올 거예요.
양도 많고요
floatfor 가격을 사용할 거예요 부동액에 대한
float도 있고요
그렇게 기본 구조를 정의할 수 있어요
네 이제 메인 함수 안에서 구조 유형을 위한 변수와 포인터를
생성해야죠
네 가장 먼저 할 일은 구조 이름으로 구성 항목을 호출하는
겁니다 그런 다음 항목을 호출하죠
이건 그냥 특이한 포인터를 만드는 거예요
구조 내부의 4가지 변수와 요소에 대해 메모리를
할당할 거예요
이제 포인터노우를 생성하고 구조 아이템을 생성할게요.
그리고 p item을 쓰겠습니다. 왜냐하면 우리는 보통 포인터를
접두사로 p라고 부르거든요.
별표와 p 아이템을 입력하세요
다음 줄에서는 포인터
아이템 즉 아이템을 할당할 거예요
아이템의 Theaddress를 사용해야 해요
포인터를 위한 구조의 요소들에 대해 메모리가 할당되어
있어요.
네 네 캐릭터 포인터를 위한 메모리는
없어요 항목 이름이죠 그게 다음 단계예요
왜 이 아이템을 구조화해야 하는지 궁금하시겠죠
그런 거 없어요
네 포인터를 생성할 수 있습니다 포인터는 구성된 아이템 포인터를 위한
메모리를 생성합니다
메모리를 할당합니다 int와 부동 소수점 수를
위해서요 하지만 아이템 이름 할당도 해야 하죠
이걸 하는 게 좋아요 좋은 연습이 되거든요
네 일반적으로 첫 번째 아이템 구조로 하는 건
초기화죠 초기화를 할 거예요
하지만 그럴 필요는 없죠
가장 먼저 할 일은 항목 이름에 대한 메모리를 이사요카이트하는 거죠
필터 오퍼셜 연산자를 이용해서 요소들에 접근할
수 있어요.
네 네 기억하세요 포인터인 구조는 대시가 있어요 기호보다
크면 요소 접근에 사용할 수 있죠
안 그러면 요소 접근을 위해 포인터를 레퍼런스를 제거해야 하니까요
괄호 안에 이런 걸 넣을 수도 있어요
네 포인터를 참조 해제할 수 있어요
*p 항목 같은 걸 작업해야 하죠 그런 다음 .을 이용해 요소에 액세스해요
이런 일을 벌일 만한 충분한 근거가 있어요
하지만 구문을 추가할 필요는 없어요
네 C#엔 특별한 구문이 있어 언제든 사용할 수 있죠 여러분 구조가
포인터일 때요 요소 접근을 원하면요
네 네 그냥 P 아이템의 이름인 포인터만 말하고 대시를 쓰면 돼요
그 이상일 수도 있어요
이 경우엔 아이템 이름을 위해 메모리를 할당해야죠
말로크 함수에서 반환된 것을 할당할 거예요
말록은 텅 빈 포인터라는 걸 명심해요
그래서 캐릭터 스타를 캐스팅해야 했죠
그렇죠 하지만 쇼핑몰을 호출합니다 그냥 쇼핑몰요 그리고 생성하고자 하는
바이트 크기를 입력하죠
네 이 경우에는 그냥 30이라고 하겠습니다 그리고 char의 크기를 곱하겠습니다
char가 다른 컴퓨터에서 다른 크기일 수도 있으니까요
아이템 이름을 할당해 줄 거예요.
아이템 이름이 구조 내 포인터이기 때문에 이렇게 해야 해요
다른 구조에 할당할 때 메모리
할당은 없어요
이렇게 해야 해요
메모리를 할당하고 나서 가장 먼저
할 일은 말똥가리를 확인하는 거예요
여기서는 null인지 확인해야죠
만약 p item이 null이면 null이라고 하죠
그렇죠 그렇지 않다면 return이나 out이 더 낫다고 하겠죠 메모리를 할당하지
못하면 프로그램을 종료하고 마이너스 1로 넘기면
됩니다
아니면 anitem에서 읽기 위해 함수를 생성하죠
우리가 만들 함수는 read item이라는 건데요
구조 위에 함수 declarationup을 놓죠
데이터베이신토에서 우리가 전달한 구조를 읽을 거예요
데이터를 반환하지 않을 거예요
아이템 읽기라고 하면 구조를 취합니다 이것은 포인터가 될 수
있죠
구조적인 항목이에요 별표 I
이제 이걸 상수로 만들 수 있어요 값이 변하는 거죠 하지만
값을 바꾸고 있어요
네 하지만 상수 구조라고 하면 값이 바뀌지 않아요 포인터를
가리키고 있습니다
네 네 별표 뒤에 상수를 붙이면 주소가 안 바뀌어요
별표 바로 전이나 이름 다음에요
네 그럼 주소는 못 바꿔요 복사값을
넘기기 때문에 중복된 거죠
읽기 아이템이 있어요
여기 있는 동안 프린트 아이템을 할게요.
functiondeclaration 함수 프로토타입이 되겠죠
이건 verysimilar가 될 거예요 포인터를 받으시고요
별표가 필요한지 아닌지 구분할 수 있나요?
메인 메서드 아래에 리다이템을 정의할 수 있어요
이제 항목의 값을 읽고 합계를 계산할
거에요.
void readitem을 하고 포인터를 가질 수 있죠
이 안에는 scanfs를 사용하면 돼요.
메시지를 출력해서 사용자에게 정보를 입력하라고 할게요
enterproduct name을 입력하고 그걸 읽어 넣어요
네 scanf라고 입력하면 구조에 대한 포인터가 있어서 대시를 이용해서 접근할
수 있습니다. 그렇다면 천하제일
scanf를 읽어야 합니다. 프로덕트 이름은 문자 버퍼예요.
%s요 %s 다음에 I라고 하는 거죠 항목 이름에 저장하는
거예요
돌아가서 인텔리센스를 이용해 아이템 이름으로 가죠
연산자의 taddress를 쓸 필요가 없어요 캐릭터
포인터니까요
네 그런 다음 프린트해 가격을 받아야죠 여기
라인 피드를 추가하고 싶을 거예요 가격을 입력하세요
이 구조물 안에 저장할 거예요
가격은 부동 소수점이에요
%f라고 하죠 %f라고 할 거예요 하지만 액세스할 겁니다 포인터니까요 대시보드를
더 크게 사용하고 싶어요
네 다만 이번에는 가격과 주소를 알아야 하니 그 앞에 ampersand를
붙일게요 가격은 포인터가 아니니까요
그런 다음 수량에 대한 새임 테스트를 할 거예요
그러니까 수량은 정수예요
%d라고 하죠 %d라고 합니다 여전히 주소를 얻어야
하지만 다른 요소에 저장하길 원하죠 양으로 저장하고 싶어요
네 좋아요 이제 사용자에게 정보 항목 3개를
입력하라고 요청하면 저장된 양을 계산할 수 있어요 금액에 뭔가 있죠
금액은 가격의 두 배예요
네 구문을 이용해서 구조에 접근하고 캐스트를
하고 양과 가격의 곱을 적고요
그게 읽기 아이템 기능이에요
구조 포인터가 필요해요
네 읽기 아이템 안에서 포인터를 수정하면 함수
밖에서 수정될 거예요
우리가 이 함수에 어떤 구조물을 넘기든 수정될
거예요
모든 Theitem과 아이템 이름, 가격,
수량, 양을 저장하죠
데이터를 읽어요
이 시점에서 여러분은 테스트하고 컴파일하고 테스트해야겠죠
이걸 하기 전에요
네 이제 메인에서 읽기 아이템 메서드를 호출해 우리가 만든
구조로 전달할 수 있습니다
읽기 항목과 p 항목이라고 할 수 있어요
테아드레스 옷은 포인터라서 안 입고 지나가도 돼요
그냥 구조물로 지나가면 되죠
그런 다음 프린트할 수 있어요
이렇게 하면 데이터가 저장된 것을 볼 수 있어요. p 항목은
함수 안에서 수정되고 함수 밖에서 저장됩니다 메인 함수가
그 값들을 저장합니다
네 아이템을 프린트하고 다시 포인터를 전달하고 프린트 아이템 함수를 정의할
수 있어요
프린트 아이템은 아주 단순해요
아무것도 반환하지 않죠 void와 item
print는 포인터를 받아요
그냥 구조 아이템 starI라고 하면 돼요 아무 이름이나 붙여요
그런 다음 전달된 구조에 대한 데이터를 프린트하죠
네 printf name 같은 걸 하죠 퍼센트 s I 아이템 이름 I
가격 I 수량, 양 그런 다음 데이터를 포맷해요
네 데이터를 출력한 후 메인에서
마지막으로 할 일이 뭐죠? 아주 중요한 기능이죠
무료 호출을 할 수 있습니다. 왜냐하면 아이템 이름에 할당된 메모리를 무료로
하고 싶기 때문이죠.
free p item 다음에 item name에 접근할 수 있어요.
네 전체 구조를 풀어주면 안 됩니다 함수가
반환되면 전체 구조가 스택에서 삭제될 것이기 때문입니다
우리가 가둔 걸 해방하고 싶을 뿐이에요
아이템name에 대해서만 간단하게 할 수 있습니다. 그것을 풀어주고 메인에서
반환할 수 있어요.
그럼 이걸 만들어보죠
오류가 있어요
구조 아이템 스타라고 써있네요
구조 위에 함수를 정의하는 데 실수가 있었어요
하지만 서퍼라미터는 구조 타입으로 쓰였죠
그래서 사용하는 곳 위에서defined를 해야 해요.
그래서 함수를 12행과 13행으로 옮겼어요
이제 컴파일할 수 있어요
이걸 실행해보죠
뭐가 나오나 볼까요?
오류가 하나 더 있어요
p item을 null로 체크해야 해요
그냥 p 아이템 fortrue라고 하면 항상 참이죠
네 참이 아니라는 걸 확인할 수도 있고 null이 아니라는 의미의
null 기호를 쓸 수도 있죠 혹은 null인지 확인할 수도 있어요
방금 null을 추가했어요
이제 작동시키면 문제없을 거예요
제품 이름을 입력할 수 있어요
연재물이라고 하고 가격은 1이라고 하죠 99살요
그런 게 5개 있어요
이제 이걸 출력해서 시리얼 달러 99라고 하죠
5, 총 9개예요 95살요
가격은 마음에 안 들지만 인쇄돼 있어요
그걸 고치죠
네 프린트 아이템에서 dor2 f 부표라고 하면 돼요
좀 더 보기 좋아지고 작동할 거예요
더 나은 포맷의 작은 비트예요
4마리를 잡았더니 조금 나아졌고
이제 다 됐어요
구조와 포인터를 이용한 기본 프로그램이죠
꼭대기에 구조물을 만들었죠
네 여기 포인터가 있는 멤버가 있어요 복사와
주소만 있으면 되니 아주 효율적이죠 문자 배열이
아니라요
두 개의 fonc 선언 항목 읽기, 아이템 프린트 항목이 있는데
포인터를 받아 파괴되죠
그런 다음 포인터를 만들어 메인 내부의 일반 구조에
할당하죠
라인 22에 메모리를 할당하죠
그렇지 않은 경우 성공적으로 기억을 저장하면 프로그램을
종료하죠
그런 다음 두 가지 기능으로 구조물을
연결하죠
마지막으로 메모리를 풀어주고 프로그램을
종료하죠
기능은 간단해요
포인터를 잡으세요
대시를 이용해 포인터에 접근하세요
요소로서 포인터가 없는 scanfs에 대한it
주소를 얻을 수 있죠.
그게 다예요
이 프로그램을 저장할 테니 한번 보세요
궁금한 거 있으면 물어보세요 고마워요