指针初级
在终端中可以用
man 3 malloc来查看如何使用
#include <stdlib.h>
void *malloc(size_t size);
void free(void *ptr);
malloc用来在堆中开辟空间
free用来释放空间
在定义一个指针变量时要注意使指针为null
避免指针指向内核和不和访问端,避免发生错误
#include <stdio.h>/*printf*/
#include <stdlib.h>/*malloc*/
void main(void)
{
int *p_integer = NULL;/*定义一个指针变量*/
p_integer = malloc(4);/*指针变量存储存储堆的地址*/
printf("堆的地址:%p\n", p_integer);/*获取堆的地址*/
*p_integer = 14;/*将数据段.rodata段的常量14放到堆中*/
printf("堆中的数据:%d\n", *p_integer);/*打印堆中的数据*/
free(p_integer);/*必须手动释放堆空间*/
p_inter=null;
printf("\n");
}
因为14是整型及需要4byte,所以在是malloc(4)
定义指针会在对应的函数内获得空间(在栈中)
p_integer = malloc(4);则会在堆中为这个指针开辟空间
*p_integer = 14则是将14这个数放到这个指针所指向的地址的位置
我们在删除一个指针之后,编译器只会释放该指针所指向的内存空间,而不会删除这个指针本身。
在删除一个指针之后,一定将该指针设置成空指针(即在delete p之后一定要加上:p=NULL,c++)(在free§后记得要写p=null,c)
编译器默认将释放掉的内存空间回收然后分配给新开辟的空间。