指针作为函数参数,修改实参值

1,指针作为函数参数,

指针可以指向内存中任意一个数据,通过间接引用能够在函数内修改函数外甚至系统中的数据;

为了避免指针作为函数参数导致数据被意外修改,我们可以使用const来保护指针所指向的数据;

2,指针作为函数返回值,

同别的数据类型int,float一样,指针也能够作为函数的一种返回值类型,把返回指针的函数称为指针函数;

返回的指针所指向的数据不能够是函数内部声明的变量;

更灵活的存储,使用数组的时候面临种尴尬:数组的存储空间必须在程序运行前申请,即数组的大小在编译前必须是已知的常量表达式;

空间申请太大造成空间浪费,太小又会造成数据溢出;

所有此处需谨慎,切实的根据实际情况申请内存空间

C++中,允许我们在程序运行时根据自己的需要申请一定的内存空间,称为堆内存空间(heap)

用new操作符来申请堆内存空间;

数据溢出(data foolding)-->指程序运行时将数据存放到较小的空间,

内存泄露(Memory leak)-->只申请内存空间不释放内存空间的情况称为内存泄露,此处申请的空间一般指的是堆内存空间;

释放堆内存空间,delete操作符

delete [] 指向堆内存首元素的指针;

实践测试堆内存空间的申请和回收;

堆内存数组和普通数组在使用上并无区别;

指针作为函数参数,修改实参值

时间: 2024-11-08 20:34:56

指针作为函数参数,修改实参值的相关文章

关于二维数据中的一维指针作为函数参数和返回值

问题描述: 1 假定定义了一个二维数组用来存放多条(总20条)数据,每条数据长度为10,uchar message[20][10] 2 要将外部来的一条数据存放到缓冲区指定位置(入口参数 uchar *p,数据的开始地址) 3 要从缓冲区读出一条记录,将其输出(出口参数 uchar *p,数据的开始地址). 那么该怎么写2个函数的形参/return值/返回值类型 答案: void sendbuf(uchar a[10]) { ...将a[0]~a[9]的值拷贝到指定缓冲区buf[i][0~9]

指针作为函数参数返回地址(值)

1.单个的字符或者数字 void swap(int *a,int *b) { int temp=*a; *a=*b; *b=temp; } int main() { int a=10,b=100; swap(&a,&b); cout<<a<<"\t"<<b<<endl; return 0; } 2.字符串的情况(利用指向指针的指针) void test(char *src,char **dst) { *dst=src; }

c++函数参数类型-值,指针,引用

    以" 值传递"方式向函数传递参数 在编写个人函数的时候,你将会受到C++中的一条基本的原则的限制:在默认的情况下,变量只能以值传递的方式传递给函数.这句话的意思是:被传递到函数的只是变量的值,永远不是变量的本身. 例如: void changeValue(int originalValue,int newValue){     originalValue = newValue;   }      int main(){     int myNum=20;     changeV

C++ 二维数组(双重指针作为函数参数)

本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851 http://blog.csdn.net/xudongdong99/article/details/6723163 1.使用二维数组作为形参的例子: void func(int arr[][10]) { } int main() { int array[10][10]; func(array); //用二维数组名作为实参,调用函数 } 上面的例子可以编译通过,

Day8 函数指针做函数参数

课堂笔记 课程回顾 多态 virtual关键字 纯虚函数 virtual func() = 0; 提前布局vptr指针 面向接口编程 延迟绑定 多态的析构函数的虚函数. 多继承的二义性 . 重载 重写 重定义. 实现多态的理论基础:函数指针做函数参数. vptr指针与虚函数表. 构造函数不应为虚函数 多态会降低程序的执行速度.不建议所有的函数都是虚函数. 多态时的指针步进. 多继承在项目开发中使用的比较少. linux从2.4内核升级到2.6的时候,做到了电源可以热插拔,提前将电源驱动的接口规划

二级指针作为函数参数的典型用法

用二级指针作为函数参数,有两种典型情况:1.需要传递一级指针的数组时:例如标准C的main函数:int main(int argc, char*[] argv),数组最高维可以退化,char*[] argv等价于char** argv.这里argv代表命令行参数数组.2.需要对传入的一级指针进行修改时:例如:void alloc_new_char_array(int n, char** t){*t = (char*)malloc(n * sizeof(t));}这里可以通过返回值达到相同的效果,

结构体,结构体指针作为函数参数的应用笔记

1. 结构体,结构体指针作为函数参数有何区别 #include <stdio.h> #include <string.h> struct animal { char name[30]; int num; }; //使用结构体作为参数 浪费内存 需要建立结构体 void change_struct(struct animal cat) { cat.num = 17; } //函数内部改变需要地址 所以需要指针保存 void change_point(struct animal *ca

函数参数,返回值,递归函数

函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形式 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值 定义函数时,是否接收参数,或者是否返回结果,是根据 实际的功能需求 来决定的! 如果函数 内部处理的数据不确定,就可以将外界的数据以参数传递到函数内部 如果希望一个函数 执行完成后,向外界汇报执行结果,就可以增加函数的返回值

用指针做函数参数的好处,

用指针做函数参数的好处, 首先要理解函数传参的过程,函数传参是复制型的,例如 void modify(int a) { a++; } void main() { int a=5; modify(a); printf("%d",a); } 程序执行完之后,a的值还是5,为什么呢,因为在执行modify函数的时候,是另外开辟了存储空间,将a的值复制过去,然后modify函数所进行的所有操作都是针对这个新开辟的空间而言的,因此程序执行完之后,a的值并没有发生改变, 如果我们用指针去传递参数,