指针和内存分配一个最基本理解
来源:互联网 发布:中国移动网络测试 编辑:程序博客网 时间:2024/06/05 11:55
一个典型的C程序主要由预处理命令 #include + 主函数main()+ function a()+ function b()+….
C语言中的5类语句:declaration + assignment + function + control + null
在C语言中,所有变量在使用前都必须定义。
一维数组名:
一维数组名是个指针常量,它存放的是一维数组第一个元素的地址。
一个指针变量,无论它指向的变量占几个字节,它本身占4个字节,一个变量的地址是用其首字节的地址来表示的。
传统数组的缺点:
1、传统数组的长度要确定,且必须为长整数。
2、数组所占的内存,程序员无法手动的释放。只能在本函数运行完毕后,系统自动释放。
3、数组的长度一旦定义,其长度就不能更改。
4、A函数定义的数组,在A函数运行期间可以被其它函数使用。但A函数运行完毕之后,A函数中的数组就无法被其他函数使用。即:数组不能跨函数使用。
int * p = (int*)malloc(4) 中:
1、要使用malloc函数,需要添加头文件malloc.h头文件
2、malloc函数只有一个形参,且是整形
3、4表示请求系统为本程序分配4个字节
4、malloc函数只能返回第一个字节的地址。
(int *)表示强制类型转换!该语句分配了8个字节,p变量占4个字节,p所指向的内存也占4个字节。P本身所占内存是静态分配的,p所指向的内存是动态分配的。Free(p)是把p所指向的内存释放了,而p本身的内存是函数运行结束后,由系统自动释放的。
P变量只有是指针变量的时候才能在前面加*,若p变量是其他的普通变量,则一定不能加*!
内存分配:
动态内存是在堆中分配的,由程序员动态的申请和手动的释放。静态内存是在栈中分配的,由系统自动分配和系统自动释放。main函数在调用某个函数(比如f()函数)时,先将f函数的内容和所需参数压栈,如果f函数要调用g函数,则把g函数的内容和所需参数压栈,以此类推。等调用完g函数之后,就会把g函数出栈,释放g函数所占内存,然后继续执行f函数,f函数执行完后,把f函数出栈,释放f函数所占内存,最后执行main函数,等main函数全部执行完后,程序运行完了,就释放程序所占的全部内存。所以动态分配内存可以跨函数使用,因为不存在进栈和出栈,而静态分配内存在函数执行完后就出栈,释放内存,所以不能跨函数使用。
- 指针和内存分配一个最基本理解
- 浅谈C,C++语言的基本数据类型的内存分配和指针的内存分配
- 动态内存分配和指针
- [Go] --- 指针和内存分配
- 动态内存分配和指针
- C语言指针传递和内存分配
- 指针和堆的内存分配
- C指针详解和内存分配
- delphi 指针的内存分配和释放
- C语言指针传递和内存分配
- 指针的内存分配和释放
- 内存分配 指针和数组对比
- C语言指针传递和内存分配
- 数组和指针内存分配示例代码
- 数组和指针内存分配示例代码
- 类内存分配和this指针
- C和指针详解------动态内存分配
- 内存分配 指针和数组对比
- java socket & java NIO 通信机制
- Struts2拦截器实现异常处理机制
- 如何解决CRITICAL glance [-] AttributeError: 'NoneType' object has no attribute 'drivername'
- 队列阻塞及描述
- hdu 5282 Senior's String 两次dp
- 指针和内存分配一个最基本理解
- Android实习02:"摇一摇"功能的实现
- leetcode系列(16)判断链表是否为回文
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- Android中加载的图片自动适应屏幕(新手)
- Android Fragment的标准写法
- 微信PC版为什么这么设计?
- 欢迎使用CSDN-markdown编辑器
- 类中static并没有那么简单