C++동적 할당 및 메모리 취소 및 구조 체 형식 을 함수 매개 변수 로 합 니 다.
6332 단어 C++
소프트웨어 개발 과정 에서 동적 으로 메모리 공간 을 분배 하고 취소 해 야 한다.예 를 들 어 동적 링크 의 노드 에 대한 삽입 과 삭제 등 이다.C 언어 에 서 는 라 이브 러 리 함수 인 malloc 와 free 를 이용 하여 메모리 공간 을 분배 하고 취소 합 니 다.C++는 malloc 와 free 함 수 를 대체 하기 위해 비교적 간편 하고 기능 이 강 한 연산 자 new 와 delete 를 제공 합 니 다.
메모:new 와 delete 는 연산 자 이 며 함수 가 아니 므 로 실행 효율 이 높 습 니 다.
C 언어 와 호 환 되 기 위해 C++는 malloc 와 free 함 수 를 유지 하지만 malloc 와 free 함 수 를 사용 하지 않 고 new 와 delete 연산 자 를 사용 하 는 것 을 권장 합 니 다.new 연산 자의 예:
new int; // , ( )
new int(100); // , 100,
new char[10]; // ( 10 ) ,
new int[5][4]; // ( 5*4) ,
float *p=new float (3.14159); // , //3.14159, p
new 연산 자가 사용 하 는 일반적인 형식 은:
new [ ];
new 로 배열 공간 을 할당 할 때 초기 값 을 지정 할 수 없습니다.메모리 부족 등 으로 공간 을 제대로 할당 하지 못 하면 new 는 빈 포인터 NULL 을 되 돌려 줍 니 다.사용 자 는 이 포인터 의 값 에 따라 할당 공간 이 성 공 했 는 지 판단 할 수 있 습 니 다.delete 연산 자가 사용 하 는 일반적인 형식 은:
delete [ ]
예 를 들 어 위 에서 new 로 열 린 보관 표 정밀도 의 공간 을 취소 하려 면(위의 예 를 들 어 사용 해 야 합 니 다.
delete p;
앞 에"new char[10];"열 린 문자 배열 공간 입 니 다.new 가 되 돌아 오 는 지침 을 포인터 변수 pt 에 부여 하면 다음 형식의 delete 연산 자 를 사용 하여 이 공간 을 취소 해 야 합 니 다.
delete [] pt; // ,
[예]구조 체 변 수 를 저장 하기 위해 공간 을 엽 니 다.
#include <iostream>
#include <string>
using namespace std;
struct Student // Student
{
string name;
int num;
char sex;
};
int main( )
{
Student *p; // Student
p=new Student; // new Student
p->name="Wang Fun"; //
p->num=10123;
p->sex='m';
cout<<p->name<<endl<<p->num
<<endl<<p->sex<<endl; //
delete p; //
return 0;
}
실행 결 과 는:
Wang Fun 10123 m
new student 이 개척 한 공간.동적 분배/취소 공간 에 서 는 이 두 연산 자 와 구조 체 를 결합 하여 사용 하 는 것 이 효과 적 입 니 다.볼 수 있 습 니 다:
new 로 열 린 구조 체 공간 에 접근 하려 면 변수 이름 을 통 해 직접 진행 할 수 없고 포인터 p 를 통 해 만 접근 할 수 있 습 니 다.동적 체인 표를 만 들 려 면 첫 번 째 노드 부터 노드 를 하나씩 열 고 각 노드 데 이 터 를 입력 하고 지침 을 통 해 앞 뒤 체인 의 관 계 를 구축 해 야 한다.
C++구조 체 형식 을 함수 매개 변수 로 합 니 다.
하나의 구조 체 변수 중의 데 이 터 를 다른 함수 에 전달 하려 면 다음 과 같은 세 가지 방법 이 있 습 니 다.
구조 체 변수 이름 으로 매개 변수.일반적으로 이런 방법 을 비교적 적 게 사용한다.
구조 체 변 수 를 가리 키 는 지침 으로 실 삼 하여 구조 체 변수의 주 소 를 형 삼 에 게 전달 합 니 다.
구조 체 변수의 인용 변 수 를 함수 매개 변수 로 하 다.
다음은 간단 한 예 를 통 해 설명 하고 비교 해 보 자.
[예]구조 체 변수 stu 가 있 는데 학생 번호,성명 과 3 과목 의 성적 을 포함한다.main 함수 에서 각 구성원 에 게 값 을 부여 하고 다른 함수 print 에서 값 을 출력 하도록 요구 합 니 다.
1)구조 체 변 수 를 함수 매개 변수 로 한다.
#include <iostream>
#include <string>
using namespace std;
struct Student// Student
{
int num;
char name[20];
float score[3];
};
int main( )
{
void print(Student); // , Student
Student stu; //
stu.num=12345; // 5
stu.name="Li Fung";
stu.score[0]=67.5;
stu.score[1]=89;
stu.score[2]=78.5;
print(stu); // print , stu
return 0;
}
void print(Student st)
{
cout<<st.num<<" "<<st.name<<" "<<st.score[0]
<<" " <<st.score[1]<<" "<<st.score[2]<<endl;
}
실행 결 과 는:
12345 Li Fung 67.5 89 78.5 (2)
2)구조 체 변 수 를 가리 키 는 지침 으로 위 프로그램 을 바탕 으로 조금 만 수정 하면 된다.
#include <iostream>
#include <string>
using namespace std;
struct Student
{
int num; string name; // string
float score[3];
}stu={12345,"Li Fung",67.5,89,78.5}; // student stu
int main( )
{
void print(Student *); // , Student
Student *pt=&stu; // Student pt, stu
print(pt); // Student
return 0;
}
// , p Student
void print(Student *p)
{
cout<<p->num<<" "<<p->name<<" "<<p->score[0]<<" " <<
p->score[1]<<" "<<p->score[2]<<endl;
}
print 함 수 를 호출 할 때,실제 포인터 변수 pt 는 stu 의 시작 주 소 를 형 삼 p(p 도 기본 형식 은 student 의 포인터 변수)에 전송 합 니 다.이렇게 형 삼 p 도 stu 를 가리 키 고 그림 을 보십시오.print 함수 에서 p 가 가리 키 는 구조 체 변수의 각 구성원 값,즉 stu 의 구성원 값 을 출력 합 니 다.main 함수 에서 도 포인터 변수 pt 를 정의 하지 않 고 print 함 수 를 호출 할 때&stu 를 실제 인삼 으로 하여 stu 의 시작 주 소 를 실제 인삼 p 에 전달 할 수 있 습 니 다.
3)구조 체 변수의 인용 을 함수 매개 변수 로 한다.
#include <iostream>
#include <string>
using namespace std;
struct Student
{
int num;
string name;
float score[3];
}stu={12345,"Li Li",67.5,89,78.5};
int main( )
{
void print(Student &);
// , Student
print(stu);
// Student
return 0;
}
// , Student
void print(Student &stud)
{
cout<<stud.num<<" "<<stud.name<<" "<<stud.score[0]
<<" " <<stud.score[1]<<" "<<stud.score[2]<<endl;
}
프로그램(1)은 구조 체 변 수 를 실제 인삼 과 형 삼 으로 하고 절차 가 직관 적 이 고 이해 하기 쉬 우 며 효율 이 높 지 않다.프로그램(2)은 포인터 변 수 를 실제 인삼 과 형 삼 으로 하고 공간 과 시간의 비용 이 적 으 며 효율 이 비교적 높다.그러나 프로그램(2)은 프로그램(1)처럼 직접적 이지 않다.
프로그램(3)의 실 삼 은 구조 체 Student 유형 변수 이 고 형 삼 은 Student 유형의 인용 을 사용 하 며 허실 결합 시 stu 의 주 소 를 전달 하기 때문에 효율 이 높다.그것 은(1)과(2)의 장점 을 겸비 하고 있다.
인용 변 수 는 주로 함수 매개 변수 로 사용 되 며 효율 을 높 일 수 있 으 며 프로그램의 좋 은 가 독성 을 유지 할 수 있 습 니 다.이 예 에서 문자열 변 수 를 string 방법 으로 정의 합 니 다.일부 C+시스템 에 서 는 현재 이 프로그램 을 실행 할 수 없습니다.독 자 는 프로그램 을 수정 하여 자신 이 사용 하 는 시스템 에서 실행 할 수 있 도록 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio에서 파일 폴더 구분 (포함 경로 설정)Visual Studio에서 c, cpp, h, hpp 파일을 폴더로 나누고 싶었습니까? 어쩌면 대부분의 사람들이 있다고 생각합니다. 처음에 파일이 만들어지는 장소는 프로젝트 파일 등과 같은 장소에 있기 때문에 파일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.