C++동적 할당 및 메모리 취소 및 구조 체 형식 을 함수 매개 변수 로 합 니 다.

6332 단어 C++
C++동적 할당 메모리(new)와 메모리 취소(delete)
소프트웨어 개발 과정 에서 동적 으로 메모리 공간 을 분배 하고 취소 해 야 한다.예 를 들 어 동적 링크 의 노드 에 대한 삽입 과 삭제 등 이다.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+시스템 에 서 는 현재 이 프로그램 을 실행 할 수 없습니다.독 자 는 프로그램 을 수정 하여 자신 이 사용 하 는 시스템 에서 실행 할 수 있 도록 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기