前言:上一篇,提到了栈和堆,想必你也清楚了栈和堆的区别,现在 通过指针的数组来看一下,指针是如何操作栈和堆的。
栈里面的数组:
<span style="font-size:18px;"> int a[10]; //这个空间实在栈内存中申请的 int *p =NULL: p =a; //a是数组的首地住所以可以直接赋值给指针p p[0]=10; //就等同于a[0]=10;</span>
这个是堆里面的数组:
<span style="font-size:18px;"> int *a = NULL; a=(int *) malloc(10*sizeof(int)); //申请10个大小的int空间,这个空间是在堆内存里申请的 if(NULL != a) { for(int i=0;i<10;i++) a[i]=i+1;//给数组赋值 } else { printf("没有申请成功") } free(a);</span>
这里值得一提的是,malloc()函数返回值 是 void * (任意类型的指针) 这里我们的a是int型指针,所以我们需要强制类型转换,就是在前面加上(int*)、另外申请 (new/malloc)出来的对象,都要判断一下是否为null,这样是一个好习惯,并且在使用完后要free()释放掉它、
free()函数的使用必须包含 #include<stdlib.h>头文件
嘿嘿,指针目前也不需要学那么深,一点一点来,因为数据结构中指针用也就这么多。
时间: 2024-11-08 17:39:18