內(nèi)存申請(qǐng)
#include<stdio.h>
// malloc memory allocate 內(nèi)存分配的
#include<malloc.h> //要使用 malloc函數(shù)一定要把 頭文件給引入進(jìn)來
int main(){
int* p = (int*)malloc(4); //一個(gè)int類型占用4字節(jié) 就要申請(qǐng)4個(gè)byte長度的內(nèi)存
// 返回值 : 是申請(qǐng)到的空間的首地址 (void) 指針類型的返回值
*p = 10;
//釋放內(nèi)存
// free(p);
// p=NULL;
printf("內(nèi)存空間里面的值為%d\n",*p);
system("pause");
}
動(dòng)態(tài)申請(qǐng)的內(nèi)存可以跨函數(shù)使用
#include<stdio.h>
#include<malloc.h>
void f(int** p){
int* pointer = (int*) malloc(sizeof(int));
*pointer = 5;
printf("f() - pointer 的地址為 %#x\n", pointer);
*p = pointer; // 把動(dòng)態(tài)申請(qǐng)的內(nèi)存空間的地址 設(shè)置給p變量
}
int main(){
int* p; // 是用來存放f() 中 pointer的地址的
f(&p); //把p變量的地址 傳遞給子函數(shù)
printf("main pointer 的地址為 %#x\n", p);
printf("pointer的值=%d\n",*p);
system("pause");
}
內(nèi)存影像
#include<stdio.h>
#include<malloc.h>
void f(int** p){
int* pointer = (int*) malloc((sizeof(int)*2)); // 申請(qǐng)的內(nèi)存可以存放兩個(gè)int
*pointer = 5;
*(pointer+1) = 100;
printf("f() - pointer 的地址為 %#x\n", pointer);
*p = pointer; // 把動(dòng)態(tài)申請(qǐng)的內(nèi)存空間的地址 設(shè)置給p變量
free(pointer); //free函數(shù)會(huì)標(biāo)記pointer所指向的內(nèi)存可以被重復(fù)使用疾嗅,但是沒有重新初始化該塊內(nèi)存的值外厂,所有會(huì)出現(xiàn)內(nèi)存影像的現(xiàn)象
//pointer = NULL;//free之后應(yīng)該標(biāo)記pointer = NULL;后面的程序就無法再使用pointer了
}
int main(){
int* p; // 是用來存放f() 中 pointer的地址的
f(&p); //把p變量的地址 傳遞給子函數(shù)
printf("main pointer 的地址為 %#x\n", p);
//pointer被free之后的內(nèi)存影像
printf("(pointer+1)的值=%d\n",*(p+1)); //內(nèi)存影像
system("pause");
}
練習(xí)
#include<stdio.h>
#include<malloc.h>
void printArr(int* arr, int len){
int i=0;
for(;i<len;i++){
//printf("arr[%d]=%d\n", i, arr[i]);
printf("arr[%d]=%d\n", i, *(arr+i));
}
}
int main(){
// 動(dòng)態(tài)申請(qǐng)一塊內(nèi)存, 里面存放的是int類型的數(shù)組
// 1 打印一句話 提示用戶輸入 數(shù)組的大小
// 動(dòng)態(tài)的創(chuàng)建出來一塊內(nèi)存空間
// 循環(huán)給數(shù)組里面每一個(gè)元素 賦值 ,再把里面的值打印輸出
printf("請(qǐng)輸入 數(shù)組的大小\n");
int len=0;
scanf("%d",&len);
int* p = (int*)malloc((sizeof(int)*len)); // len= 6 執(zhí)行完畢后申請(qǐng)了多少byte內(nèi)存?
// 1. 靜態(tài)申請(qǐng)的內(nèi)存 int* 4byte
// 2. 24byte
// 24+4 28;
printf("請(qǐng)賦值\n");
int i=0;
for(;i<len;i++){
scanf("%d",p+i);
}
printf("---結(jié)果--\n");
printArr(p,len);
printf("請(qǐng)輸入增加后的數(shù)組的大小\n");
int len2=0;
scanf("%d",&len2);
if(len2>len){
p = (int*) realloc(p,len2);
}
printf("請(qǐng)給剩余的數(shù)組賦值\n");
int j=len;
for(;j<len2;j++){
scanf("%d",p+j);
}
printf("---結(jié)果--\n");
printArr(p,len2);
system("pause");
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者