admin管理员组文章数量:1516870
指针与内存
一.首先在谈指针之前,需要先说一下内存,程序在运行时内存分为如下几块:
栈:分配局部变量空间,存储临时变量,由操作系统分配回收。
堆:由程序员手动通过malloc/new分配,操作系统可能不会回收需要手动释放,否则会造成内存泄漏,malloc/free与new/delete要成对出现。
常量区:存放常量,比如字符串常量。
全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,该区域在程序结束后由操作系统释放。
代码区:由操作系统分配,对程序员来说是透明的,无法访问。
#include<stdio.h>
int a = 0;//全局区
int main()
{int b; //栈 char s[] = "abc"; //栈 char *p2; //栈 char *p3 = "123456"; //123456在常量区,p3在栈上。p2 = (char *)malloc(20); //堆 static int c =0; //全局(静态)区return 0;
}
二.关于指针我们需要知道:
1. 指针变量也是一种变量,占有内存空间,用来保存内存地址
2. 指针与内存紧密相连,没有内存指针没有意义
3. 对指针的操作实际上是对内存间接操作
4. 指针变量和它指向的内存块是两个不同的概念
5. 指针是一种数据类型,取决于它所指向的内存空间的数据类型
#include<stdio.h>int main()
{int a=10;int *p;p=&a;printf("a:%d\n",a);printf("&a:%x\n",&a);printf("p:%x\n",p);printf("*p:%d\n",*p);return 0;
}
运行结果如图:
代码内存如图:
由图我们可以看出p中存放的是a的地址,而并不是a的值,那么对*p的操作就是对a的操作
对于指针
- 在指针声明时,*号表示所声明的变量为指针
- 在指针使用时,*号表示 操作 指针所指向的内存空间中的值
- *p相当于通过地址(p变量的值)找到一块内存;然后操作内存
- *p放在等号的左边赋值(给内存赋值)
- *p放在等号的右边取值(从内存获取值)
本文标签: 指针与内存
版权声明:本文标题:指针与内存 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1707389412a728515.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论