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

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

首先要理解函数传参的过程,函数传参是复制型的,例如

void modify(int a)

{

a++;

}

void main()

{

int a=5;

modify(a);

printf("%d",a);

}

程序执行完之后,a的值还是5,为什么呢,因为在执行modify函数的时候,是另外开辟了存储空间,将a的值复制过去,然后modify函数所进行的所有操作都是针对这个新开辟的空间而言的,因此程序执行完之后,a的值并没有发生改变,

如果我们用指针去传递参数,那么久完全不一样了,

void modify(int * a)

{

(*a)++;

}

void main()

{

int a=5;

modify(&a);

printf("%d",a);

}

程序的执行结果当然是6,因为你传递的是a的地址,所以modify函数都是对a地址上面的内容进行操作,用指针作为函数参数的时候,在参数传递的时候其实也是另外开辟了一个存储空间,然后把指针的值复制过去,然后函数对新开辟的这个存储空间里面的这个指针变量进行操作。

什么时候用指针,什么时候用普通的拷贝的方式传递参数,当传递的参数是一个结构体,而这个结构体比较大,这个时候最好用指针,如果用拷贝的话,单单花在拷贝的时间就要浪费很多,

时间: 2024-08-02 11:04:24

用指针做函数参数的好处,的相关文章

通过操作指针,与指针做函数参数'实现字串在主串中出现的次数,然后将出现的部分按照要求进行替换

#include<stdio.h> #include<stdlib.h> int strTime(const char *str1, const char *str2, int *time) { int count = 0; char *p1 = str1; char *p2 = str2; //p1是第一次出现的位置 p1 = strstr(p1, p2); //注意这里不要写成*p1!=NULL 因为p1 是null的地址一旦读取*p1 会出错的!!!!不能读取操作系统的数据

Day8 函数指针做函数参数

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

C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态

1,数组指针语法梳理 回顾,如何定义数组数据类型: 回顾,如何定义指针类型数组: 回顾,如何直接定义 一个指向数组类型的指针: 2,函数指针语法梳理 1)如何定义一个函数类型 2)如何定义一个函数指针类型 3)如何定义一个函数指针(指向一个函数的入口地址) [中级程序员 转 高级程序员的 必经之路] 1,函数类型做函数的参数 把函数的入口地址传过来,奇怪的效果:[多态就是这样] 函数指针 做 函数参数 思想剖析 1,数组指针语法梳理 回顾,如何定义数组数据类型: [email protected

实参和形参指针做函数参数时,如何改变main函数变量的值

//对输入的两个整数按大小顺序输出 代码如下: #include<iostream> using namespace std; int main() { void swap(int *p1,int *p2); int *pointer_1,*pointer_2,a,b; cin>>a>>b; pointer_1=&a; pointer_2=&b; if(a<b)swap(pointer_1,pointer_2); cout<<"

二维数组做函数参数、指向指针的指针做函数参数

这里有一篇文章  写的很好http://blog.csdn.net/f81892461/article/details/8974087 该文章中有一句话  总之就是:数组无法作为参数,总会被编译器将地址赋值给形参指针的,即使指针定义成数组形式,也还是指针.然后各种差别都是由数组和指针不同的定位元素的方式导致的. 这句话说的很对啊,数组做形参的是时候都是被当成指针来处理的.不明白这句话的可以看一下,参考文章链接里的那幅图,注意比较一下下图中的两个:data+1,第一个data+1指向的是元素dat

指向数组的指针做函数参数练习----打印不及格学生成绩

输出不及格学生的序号以及他们的所有成绩. #include <stdio.h> int main(){ void search(float (* p)[4]); //数组表示3名学生的4门课的成绩,本程序要找到有不及格课程 //的学生序号,并打印出来他们的所有成绩 float score[3][4]={{5,67,89,78}, {34,78,90,78}, {89,87,98,90}}; search(score); } void search(float (* p)[4]){ for(in

结构体指针做函数参数

1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 //定义一个结构体 7 //定义一个数据类型.固定内存大小的别名,还没有分配内存 8 /*struct Teacher 9 { 10 char name[5]; 11 int age; 12 };*/ 13 typedef struct Teacher 14 { 15 ch

C语言 数组做函数参数退化为指针的技术推演

//数组做函数参数退化为指针的技术推演 #include<stdio.h> #include<stdlib.h> #include<string.h> //一维数组做函数参数退化为指针的技术推演 void printfA(char * strarr[3]); //计算机中,数组都是线性存储,二维数组元素也是一个个的排列的 //例如: 1,2,3,4,5,6,7,8,9 像这组数据 我们可以认为是一维数组 int a[9]={1,2,3,4,5,6,7,8,9}; //也

对于在函数把指针做为参数传入的几点总结

一.形如void Func(char* ptr). 注意这里传进去的是指针的副本,本质上是传值的方式.在函数内部新建一个指针变量,再把ptr指向的值赋给局部指针变量.对局部变量本身地址的任何修改都不会影响到ptr. 1 int newInt=1; 2 3 void ChangeLoc(int* ptr) 4 { 5 ptr=&newInt; 6 } 7 8 int main() 9 { 10 int num=2; 11 int* ptr=&num; 12 cout<<ptr&l