指针形参实参传递时需要注意

指针形参实参传递时需要注意:

主调函数中实参指针传给被调函数的形参指针时,意味着两个指针指向同一块内存单元。这种情况下在被调函数中通过形参指针对内存区进行操作后,极有可能带来两个指针(形参指针和实参指针)指向不一致。这并不只是由malloc函数造成的(否定之前的观点)。如果在主调函数中依然需要被调函数完成后的那个形参指针,明智的做法是将形参指针返回给主调函数。

为了远离这种不一致,最好的方法就是一律返回。

PS:如果主调函数以后并不需要使用被调函数中的那个形参指针,此时就大可放心的使用指针之间的参数传递,并不需要返回。此时在主调函数中也可以运用取地址符&,把实参值的地址传递给被调函数的形参指针。

时间: 2025-01-02 16:32:37

指针形参实参传递时需要注意的相关文章

参数传递:传值参数,指针形参,传引用参数,const形参和实参,数组形参,main:处理命令行选项,含有可变形参的函数

重点: 1.每次调用函数时都会重新创建它的形参,并用传入的实参对形参进行初始化. NOTE: 形参初始化的机理与变量初始化一样. 2.形参的类型决定了形参和实参交互的方式. (引用->绑定,非引用->拷贝) 3.实参分为:被引用传递(引用形参是实参的别名),被值传递(实参形参是两个相互独立的对象). 4.传值参数:函数对形参做的所有操作都不会影响实参. 5.指针形参:指针的行为和其他非引用类型一样,当执行指针拷贝操作时,拷贝的是指针的值.拷贝后,两个指针是不同的指针. NOTE: C程序员常常

ErLang在‘形参传递’时可以右向匹配

在正常情况下: {A,B,C} = {1,2,3}. 但是不可以{1,2,3} = {A,B,C} . 可是数据当作参数传递时,却可以右向匹配,如: print({name,Name}=NameTup,{age,Age}) ->和 print(NameTup={name,Name},{age,Age}) -> 这两种方法都可以将NameTup匹配到第一个参数上. 修改:换个思路想这个问题,其实所谓的右向匹配,即第一种写法,只是先把参数匹配到NameTup上然后再级联匹配到{name,Name}

引用,引用形参,指针形参与指向指针的引用形参,内存泄露及free相关

由做UVa133引发的一系列问题及讨论 1.引用类型    C++ Primer P51 引用就是对象的另一个名字,使用多个变量名指向同一地址.实际程序中,引用主要用作函数形参. 复合类型.不能定义引用类型的引用,但可以定义任何其他类型的引用. 格式: 类型名&  标示符=已声明的常变量; 2.引用形参    C++ Primer P201-205 非引用形参有普通的.指针形参.const形参(可传const对象或非const对象) 引用形参,3种情形:@修改实参,或返回多个值  @避免复制大型

函数(形参/实参)

函数是带名字的代码块,用于完成具体的工作   要执行函数定义的特定任务,可调用该函数. 什么时候使用函数:   当在程序中需要多次使用同一功能的时候,为了简化代码,可以把这个功能定义到函数. 定义一个最简单的函数 >>> def hi(): ...     print("hello,world") >>> hi() hello,world >>> type(hi) <class 'function'> 向函数传递信息: 

无法把指针变量本身传递给一个函数

例1: #include<stdio.h> #include<stdlib.h> void fun(char*p) { char c = p[3];//或者是char c=*(p+3); } int main() { char*p2 = "abcdefg"; fun(p2); system("pause"); return 0; } 错误,因为无法把指针变量本身传递给一个函数 应该对实参做一份拷贝并传递给被调用函数,即对p2做一份拷贝,假设其

指针用作传出参数时,需要二级指针

1. 参数传递的原则是:形参传给实参,不能反向传递: 2. 一级指针可以在函数内部修改形参指针指向的内容; 如: void fun(char *p) { p[2] = a;//由形参(实参)指向的函数外部的数组的内容就被改变了. } 如果我们想改变实参本身呢?也就是说,我们连指针值都要改变,如果使用: void GetMemory(int num, char *p) { p = (char *)malloc(num * sizeof(char)) //或C++中:p = new char[10]

关于指针形参的一点体会

关于指针形参的一点体会: 现在假设指针实参为地址&a(0001)在这个&a(0001)地址空间内所存储的是一个int类型的变量为0: 那么在被调用函数中,会临时开辟一个空间一片临时地址空间&b(0002),在&b的所指向的地址空间内,其所存储的内容为一个地址值,这个地址值,就是&a(0001).所以现在在被调函数中,有两种变化的操作:1. 对&b(0002)所指向的地址内存储的内容,进行改变,比如讲将&b(0002)所指向空间内的值就是(0001)改

结构体嵌套,指针形参,引用传参

1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 6 struct Student 7 { 8 int s_id; 9 string s_name; 10 int s_phonenum; 11 }; 12 13 struct Teacher 14 { 15 int m_id; 16 string m_name; 17 Student m_stu;//班长 18 Student starr[50];/

函数指针形参

编写函数的声明,令其接受两个int形参并且返回类型也是int:然后声明一个vector对象,令其元素是指向该函数的指针.编写4个函数,分别对两个int值执行加.减.乘除运算. #include<iostream> #include<string> #include<vector> using namespace std; int plus1(int x,int y) { return x+y; } int sub(int x ,int y) { return x-y;