C언어 포인터 연산 (8) * 동적 메모리 할당 및 이를 가리키는 포인터 변수

여기에 이미지 설명 삽입

배움의 가장 큰 이유는 평범함을 버리는 것입니다 하루 일찍 삶이 더 화려해질 것이고 하루가 지나면 하루 더 평범해질 것입니다. 

공부일기

목차

공부일기

머리말편집

1. 동적 메모리 할당이란 무엇입니까?

2. 동적 메모리 할당 설정 방법 

malloc 함수를 사용하여 동적 저장 영역 열기       

 calloc 함수를 사용하여 동적 저장 영역 열기

realloc 함수를 사용하여 동적 메모리 재할당 

무료 기능을 사용하여 동적 저장 영역 해제 

세, 무효 포인터 유형 

 알아채다

C 언어 포인터 조작


머리말

          여기서 포인터는 "포인터 변수", " 포인터가 참조하는 배열 ", "*포인터가 참조하는 다차원 배열", "포인터가 참조하는 문자열", "*함수에 대한 포인터", "* 함수 포인터 값 반환", "* 포인터 및 다중 포인터 배열", "*동적 메모리 할당 및 포인터 변수".  

1. 동적 메모리 할당이란 무엇입니까?

        전역 변수는 메모리의 정적 저장 영역에 할당되고, 비정적 지역 변수(형식 매개변수 포함)는 메모리의 동적 저장 영역에 할당되며, 이 저장 영역을 스택(stack)이라고 합니다. 또한 C 언어는 일부 임시 데이터를 저장하기 위해 메모리 동적 할당 영역을 설정할 수 있습니다. 이러한 데이터는 프로그램의 선언 부분에서 정의할 필요가 없으며 함수가 끝날 때까지 해제할 필요도 없습니다. , 그러나 필요할 때 언제든지 열 수 있습니다. 이러한 데이터는 힙(heap) 영역이라는 특수한 무료 저장 영역에 임시로 저장됩니다. 필요에 따라 필요한 크기의 공간을 시스템에 신청할 수 있습니다. 선언 부분에 변수나 배열로 정의되어 있지 않기 때문에 이러한 데이터는 변수 이름이나 배열 이름으로 참조할 수 없으며 포인터로만 참조할 수 있습니다.

2. 동적 메모리 할당 설정 방법 

malloc 함수를 사용하여 동적 저장 영역 열기       

 void*malloc(부호 없는 정수 크기)

        그 기능은 메모리의 동적 저장 영역에 크기의 길이로 연속적인 공간을 할당하는 것입니다. 형식 매개변수 크기의 유형은 부호 없는 정수로 정의됩니다(음수는 허용되지 않음). 이 함수의 값(즉, "반환 값")은 할당된 영역의 첫 번째 바이트의 주소, 즉 이 함수는 포인터 함수이며 반환된 포인터는 해당 영역의 첫 번째 바이트를 가리킵니다. 할당된 지역.

        포인터의 기본 유형은 무효입니다. 즉, 어떤 유형의 데이터도 가리키지 않고 순수 주소만 제공합니다.

 calloc 함수를 사용하여 동적 저장 영역 열기

 void*calloc(부호 없는 n,부호 없는 크기)

        그 기능은 메모리의 동적 저장 영역에 크기의 길이를 가진 n개의 연속적인 공간을 할당하는 것인데, 이 공간은 일반적으로 배열을 저장하기에 충분히 큽니다. calloc 함수는 1차원 배열에 대한 동적 저장 공간을 여는 데 사용할 수 있습니다. n은 배열 요소의 수이고 각 요소의 길이는 크기입니다. 이것은 동적 배열입니다.

realloc 함수를 사용하여 동적 메모리 재할당 

 void*realloc(void *p,unsigned int 크기)

        malloc 함수나 calloc 함수를 통해 동적 공간을 확보하고 그 크기를 변경하고 싶다면 realloc 함수를 이용해 재할당하면 된다. realloc 함수를 사용하여 p가 가리키는 동적 공간의 크기를 크기로 변경합니다. p의 값은 변하지 않습니다. 재할당에 실패하면 NULL을 반환합니다.

무료 기능을 사용하여 동적 저장 영역 해제 

 무효 무료(무효 *p)

        함수는 포인터 변수 p가 가리키는 동적 공간을 해제하여 공간의 이 부분을 다른 변수에서 재사용할 수 있도록 하는 것입니다. p는 마지막으로 calloc 또는 malloc 함수를 호출했을 때 얻은 함수 반환 값이어야 합니다. 

세, 무효 포인터 유형 

        C99는 기본 유형이 void인 포인터 유형을 허용합니다. 어떤 유형의 데이터도 가리키지 않는 기본 유형이 void(즉, 유형이 void*인 변수)인 포인터 변수를 정의할 수 있습니다. 다른 포인터 변수에 값을 할당할 때 할당된 변수의 유형에 적합하도록 시스템에서 유형 변환합니다.

int *pt;
pt=(int *)malloc(100);	//malloc(100)是void *型,把它转换为int *型

 알아채다

        "빈 유형을 가리키는 것"을 "모든 유형"을 가리킬 수 있는 데이터로 이해하지 말고 "빈 유형을 가리키는 것" 또는 "특정 유형을 가리키지 않는 것"으로 이해해야 합니다.

        동적배열을 생성하여 5명의 학생의 성적을 입력하고 함수를 이용하여 60점 이하인 학생이 있는지 확인하여 부적격 성적을 출력한다. 

#include <stdio.h>
#include <stdlib.h>				//程序中用了malloc函数,应包含stdlib.h
int main()
{	void check(int *);				//函数声明
	int *p1,i;						//p1是int型指针
	p1=(int *)malloc(5*sizeof(int));	//开辟动态内存区,将地址转换成int *型,然后放在p1中
	for(i=0;i<5;i++) 
		scanf("%d",p1+i);			//输入5个学生的成绩 
	check(p1);					//调用check函数
	return 0;
}

void check(int *p)					//定义check函数,形参是int*指针
{	int i;
	printf("They are fail:");
	for(i=0;i<5;i++)
		if(p[i]<60) printf("%d ",p[i]); 	//输出不合格的成绩 
	printf("\n");
}

C 언어 포인터 조작

C언어 포인터 연산 (1) 포인터 변수

포인터를 통해 배열을 참조하는 C 언어 포인터 작업(2)

C언어 포인터 연산 (3) *포인터를 통한 다차원 배열 참조 

포인터를 통해 문자열을 참조하는 C 언어 포인터 연산(4개)

C 언어 포인터 연산 (5) * 함수에 대한 포인터

C언어 포인터 연산 (6) * 포인터 값을 반환하는 함수

C 언어 포인터 연산 (7) * 포인터 배열 및 다중 포인터 

C언어 포인터 연산 (8) * 동적 메모리 할당 및 이를 가리키는 포인터 변수

추천

출처blog.csdn.net/m0_63794226/article/details/126617479