C++(四):对malloc函数+子函数参数的奥秘的探索

    科技2024-10-08  20

    在对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去输入。

    Processed: 0.009, SQL: 8