C++(四):对malloc函数+子函数参数的研究

在对malloc函数进行测试的时候,共发现了几点特点,与大家分享:
先上代码

#include <iostream>
using namespace std;

int subfun(int& L) {
	int* p;
	p = &L;
	return *p;
}


int main()
{	
	int a=10, b=11, c=12;
	int* p1, * p2, * p3;
	//p1 = 10;	//会报错。第一点,指针不能直接赋值立即数类型的地址。
	//p1 = a;	//×
	p1 = &a; 
	cout << p1<<" "<<&a<<endl;//p是指针,是a的地址赋值给了p
//---------------------------
	p2 = (int*)malloc(sizeof(int));//p2是指针,但是没有确定的变量相关联
	*p2 = 1000;//*p2是变量,不是指针
	//p2 = &1000;//会报错×
	cout << p2<<" "<<*p2<<endl;
//---------------------------
	p3 = (int*)malloc(sizeof(int));//第二点:不初始化指针则无法赋值一个数值的地址(但代表数值的变量的地址可以)
	*p3 = subfun(*p2);//将p2指针参数输入subfun,应该得到,p2指针代表的数值
	cout << *p3 << endl;
	//第三点:对于子函数,其参数主要看参数值中变量的格式
	//比如子程序的参数是&L,那么看L,其格式为变量,那么
	//在主函数调用子函数时,输入的应该为变量。
	//指针也因该转为变量去输入,比如转为*p。
}

结果:
结果
总结:
一:指针p=&x可以,但指针代表的内容*p=x则不可以,此时需要申请空间,因为指针在一开始并不指向一个具体的变量的空间存储位置,而“p“的意思是:指针p所代表的变量的空间位置。换句话说,你不给他空间位置,它何来意义?
未初始化的指针无法指向一个“数值”(但代表数值的变量可以)。
如果我们要对指针赋值一个变量的话,那么我们需要使用malloc申请这个指针所代表的变量占用的空间。
总之,在声明一个指针后,我们只要通过这个指针来操作指针指向的变量(如
p=x),我们就必须使用malloc申请空间。
更具体简单的例子请见我的另一篇文章:
https://blog.csdn.net/qq_43210248/article/details/109046553

二:输入子函数的参数格式,只取决于是子函数的参数值中的“变量”的格式。
比如子程序的参数整体虽然是&L,但是格式只取决于L(是指针,还是变量)。
若其格式为变量,那么在主函数调用子函数时,输入的应该为变量。
这时,即使是指针也因该转为变量去输入,比如转为*p去输入。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值