c语言—指针基础(7:静态分配内存)
2017-12-15 01:29
423 查看
静态内存分配,分配的是栈内存(大小固定,由系统统一分配和回收)
#include "stdafx.h" //函数返回一个指针地址 int* fun1() { int arr[] = {1,2,3,4}; //声明一个int类型的指针变量保存int数组的首地址 int *p = &arr[0]; return p; } int* fun2() { int arr[] = { 4,3,2,1 }; //声明一个int类型的指针变量保存int数组的首地址 int *p = arr; return p; } int main() { int *q = fun1(); //在调用fun1()结束后,fun1()所占用的栈内存就会被系统回收掉 printf("*q=%d,*(q+1)=%d,*(q+2)=%d,*(q+3)=%d\n",*q,*(q+1), *(q+2), *(q+3)); //fun2()又去申请五个int元素的栈内存,此时恰好fun1()释放的栈内存和fun2()所需要申请的栈内存大小一样 //所以就把fun1()释放的栈内存地址给了fun2(),由于之前q已经记住了fun1的内存地址,所以就把fun2中的内容放到之前被fun1释放的内存地址里了 fun2(); printf("*q=%d,*(q+1)=%d,*(q+2)=%d,*(q+3)=%d\n", *q, *(q + 1), *(q + 2), *(q + 3)); //在调用fun2()结束后,fun2()所占用的栈内存就会被系统回收掉,当再次去调用时,若被系统回收,则无法取到对应地址的值。 printf("*q=%d,*(q+1)=%d,*(q+2)=%d,*(q+3)=%d\n", *q, *(q + 1), *(q + 2), *(q + 3)); }
相关文章推荐
- 数据结构基础:指针及动态内存分配(malloc)
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- C语言——指针与结构体 内存的动态分配
- 修改的 创建队列程序 C语言。 队列元素 是堆分配内存,而非指针
- C语言 内存分配 地址 指针 数组 参数 实例解析 (C语言复习)
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- C语言系列之指针类型内存分配模板
- C语言,指针与内存分配
- C语言链表的基础,malloc()分配内存
- C语言03 - 函数指针、内存分配、字符串使用
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- C语言 内存分配 地址 指针 数组 参数 实例解析
- C语言 内存分配 地址 指针 数组 参数 实例解析
- C语言 内存分配 地址 指针 数组 参数 实例解析
- C语言 内存分配 地址 指针 数组 参数 实例解析
- C语言回顾(七、多重指针,argc,argv,动态内存分配,void指针,const)——iOS开发基础
- C语言 内存分配 地址 指针 数组 参数 解析
- C语言 内存分配 地址 指针 数组 参数 实例解析
- C语言指针及内存分配
- Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组