说明多级指针与动态变量,静态变量关系的几个简单程序
// 多级指针
# include <stdio.h>
int main(void)
{
int i = 1;
int * p;
int ** q;
p = &i;
q = &p;
printf("i = %d, p = %d, q = %d\n", i, p, q);
printf("*p = %d, &i = %d, &p = %d\n", *p, &i, &p);
printf("**q = %d, *q = %d, &q = %d\n", **q, *q, &q);
return 0;
}
/*
程序输出结果:
i = 1, p = 6487628, q = 6487616
*p = 1, &i = 6487628, &p = 6487616
**q = 1, *q = 6487628, &q = 6487608
--------------------------------
Process exited after 0.01289 seconds with return value 0
请按任意键继续. . .
结论:
多级指针就是储存了一个指针变量地址的指针变量。
*/
// 多级指针与静态变量的缺陷
# include <stdio.h>
void f(int ** q)
{
int i = 5;
**q = i;
return;
}
int main(void)
{
int * p;
f(&p);
printf("%d", *p); // 此处逻辑错误
return 0;
}
/*
本程序编译正确,但却无法执行,原因是语法上没有错误,但逻辑上有错。
错误语句为 printf("%d", *p); 此处的 *p 有问题,原因是 *p 相当
于 i 变量,但程序在执行完被调函数 f 后,就将 i 的内存释放了,接下
来 i 就不属于此程序的内存,而 *p 访问的是已被释放的内存 i ,这样
就出现了错误。
*/
类比于上一个程序。
// 多级指针与动态变量
# include <stdio.h>
# include <malloc.h>
void f(int ** q)
{
*q = (int*)malloc(sizeof(int));
**q = 5;
return;
}
int main(void)
{
int * p;
f(&p);
printf("%d", *p);
free(p); // 释放 p 所指向的内存。
return 0;
}
/*
程序输出结果:
5
--------------------------------
Process exited after 0.02017 seconds with return value 0
请按任意键继续. . .
由于使用了 malloc 函数,构造了一个动态变量,而动态变量需要手动释放
可以跨函数使用。
*/
转载于:https://www.cnblogs.com/lnlin/p/6537852.html
说明多级指针与动态变量,静态变量关系的几个简单程序相关推荐
- 函数作用域的静态变量
2019独角兽企业重金招聘Python工程师标准>>> 下面这段话来自百度百科: 静态局部变量属于静态存储方式,它具有以下特点: (1) 静态局部变量在函数内定义,但不像自动 ...
- 【函数的定义、调用(嵌套调用、递归调用)、声明、函数的分类(有无返回值、有无参数)、变量(自动变量与静态变量、局部变量与全局变量、只读变量)】(学习笔记7--函数)
第一篇博文,打卡新星计划第三季3.4~4.4,希望能有质的飞跃,顶峰相见 一.自定义函数 1.函数的定义 函数在使用前也需要定义,定义的格式如下: 数据类型 函数名([数据类型 参数1],[数据类型 ...
- 1.16 static关键字(静态变量和静态方法)
在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有. 静态成员不依赖于类的特定实例,被 ...
- Java 静态变量和静态方法
在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有. 静态成员不依赖于类的特定实例,被 ...
- Java中的静态变量和静态方法
决定哪些方法或变量声明为静态的,是类设计时的关键步骤. 静态变量(static variable)有时也称为类变量(class variable),它由类的所有实例共享.对于类的所有对象来说,静态变量 ...
- 类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类
常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式 ...
- 全局变量和静态变量以及内存堆栈的关系
在编写程序时,内存的控制是很重要的一部分.关于全局变量和局部变量,静态变量的关系如何?以及他们在内存在是存储于哪部分的?做个记录,以便往后查看. 1. 全局变量和静态变量 全局变量:又称外部变量,与之 ...
- python静态变量和动态变量_动态变量和静态变量的区别,堆和栈的区别
动态变量和静态变量的区别: 1.存储位置 动态变量:存储在内存出栈数据区 静态变量:存储在全局数据区(静态数据区) 2.生命期 动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数 ...
- 动态变量和静态变量的区别,堆和栈的区别
动态变量和静态变量的区别: 1.存储位置动态变量:存储在内存出栈数据区静态变量:存储在全局数据区(静态数据区) 2.生命期动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围变 ...
最新文章
- 【Socket网络编程】4.tcp和udp的客户端和服务端收发流程
- 【加法笔记系列】逻辑电路的实现
- leetcode 834. Sum of Distances in Tree | 834. 树中距离之和(树形DP)
- .NET Core加解密实战系列之——RSA非对称加密算法
- 前端学习(1535):单一页面的优势
- 安卓手机 Python 自动化测试
- 在C#中用RX库和await来实现直观的状态机
- 夜间排障某省某电信公司后台数据库故障
- 使用shell实现zookeeper集群的自动搭建
- python装饰器详解-Python装饰器基础概念与用法详解
- 51nod1712 区间求和
- SM3密码杂凑算法和SM2数字签名算法的PDF签名方法
- 计算机桌面桌面设置动态视频教程,电脑怎么设置动态桌面?电脑设置动态视频桌面教程...
- 新冠疫情加速医疗废物处置行业发展,我国医废处置能力达6245吨/天
- golang 求差集和并集算法
- Linu修改系统时间
- 安卓adb是什么?ADB命令大全及使用教程
- 微信支付可以设置0元么?
- linux桌面 仿android,Ubuntu粉丝必备!仿Ubuntu锁屏App体验
- python简单爬取斗图图片(自学第十天)
热门文章
- 收藏 | 一文看懂注意力机制
- 当模型预测控制遇见机器学习
- 全球首款光线追踪GPU
- 深度学习(六十)网络压缩简单总结
- 复述-软考网规--云计算专题
- 网线重新插拔后恢复正常_14日科技精选:路由器经常掉线,必须重新插拔网线才能上网。什么原因?...
- ubuntu linux kvm安装,ubuntu16.04 下kvm安装
- php 数组改成索引数组_PHP 自定义集合与数组规范
- c语言判断回文字符串递归,用递归实现判断一个字符串是否为回文串
- android ripple 大小,Android L限制Ripple水波纹范围大小