【C语言学习笔记】

本文解析了一道2003年的计算机二级考试题目,该题涉及C语言中的指针概念及其正确使用方法。通过对四个选项的逐一分析,帮助读者理解如何让指针指向合法的整型单元。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在学习C语言的过程中,遇到了一道2003计算机二级考题,考察了指针的使用。特此记录下来。


一、题目

以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是()。

A) main()
{
	int*p;
	fun(p);
}
int fun(int *p)
{
	int s;
	p=&s;
}

B) main()
{
	int *p;
	fun(&p);
}
int fun(int **p)
{
	int s;
	*p = &s;
}

C) #include 
	main()
{
	int *p;
	fun(&p);
}
int fun(int **p)
{
	*p = (int *) malloc(2);
}

D) #include
	main()
{
	int *p;
	fun(p);
}

int fun(int *p)
{
p = (int *)malloc(sizeof(int));
}

二、解答

首先明白形参与实参的概念。

  • 实参(实际参数)
    函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参
    形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。

  • 形参(形式参数)
    在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。程序调用结束后,分配给形参的内存会被收回,形参的值也随之不复存在。

其次要知道,函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

下面是这道题的解答:
A) ✘
从主函数开始,main()中声明了一个指向int类型的指针变量p,接着调用fun§,这里p是实参;再看fun(int *p),注意这里p是形参,在内存中和实参p不在同一个地址(可以理解为刚刚好有两个同名的人,但是他们住的地址并不一样由此可以将他们区分开来,所以并不能说他们两是同一个人)。因为p是形参,所以p也可以是任意其他的变量名,为了方便理解不混淆,我们姑且把p换成a(下同)。那么接下来main()中调用fun§的操作如下:
1.赋值 a = (实参)p ;
2. int s;
3. a = &s ;
调用结束后,形参的内存被收回,a的值也不复存在。
fun§也未对p的值进行改变,p指向一个未知的地址,非法!

B) ✘
声明一个指向int类型的指针变量p;
1.int *p
2.调用fun(),传入实参&p;
3.传入参数后,实参的值会被赋给形参 : *a = &p ;
4. int s;
5. *a = &s ;
结果同样是p指向了一个未知的地址。

C) ✔
1.int *p
2.调用fun(),传入实参&p;
3.声明a是一个指向int类型指针的指针变量: int **a;
4.赋值 a = &p ;
5.*a 表示访问a所指向的地址,所以 *a = p;
6.p = (int *) malloc(2);malloc()返回的是一个void *类型的指针,强制转换为int *类型
所以p指向了一个合法的整型单元。

D)✘
1.int *p
2.调用fun(),传入实参&p;
3.赋值a = p;
4.a =(int *)malloc(sizeof(int));
5.调用结束,a的内存回收。p的值未被修改。

内容概要:本文档详细介绍了基于MATLAB实现的多头长短期记忆网络(MH-LSTM)结合Transformer编码器进行多变量时间序列预测的项目实例。项目旨在通过融合MH-LSTM对时序动态的细致学习和Transformer对全局依赖的捕捉,显著提升多变量时间序列预测的精度和稳定性。文档涵盖了从项目背景、目标意义、挑战与解决方案、模型架构及代码示例,到具体的应用领域、部署与应用、未来改进方向等方面的全面内容。项目不仅展示了技术实现细节,还提供了从数据预处理、模型构建与训练到性能评估的全流程指导。 适合人群:具备一定编程基础,特别是熟悉MATLAB和深度学习基础知识的研发人员、数据科学家以及从事时间序列预测研究的专业人士。 使用场景及目标:①深入理解MH-LSTM与Transformer结合的多变量时间序列预测模型原理;②掌握MATLAB环境下复杂神经网络的搭建、训练及优化技巧;③应用于金融风险管理、智能电网负荷预测、气象预报、交通流量预测、工业设备健康监测、医疗数据分析、供应链需求预测等多个实际场景,以提高预测精度和决策质量。 阅读建议:此资源不仅适用于希望深入了解多变量时间序列预测技术的读者,也适合希望通过MATLAB实现复杂深度学习模型的开发者。建议读者在学习过程中结合提供的代码示例进行实践操作,并关注模型训练中的关键步骤和超参数调优策略,以便更好地应用于实际项目中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值