使用指针做形参来解决函数的副本机制

/*在函数里面改变一个外部变量,就需要变量的地址

如果是数据,需要指向数据的指针存储数据的地址

如果是指针,就需要指向指针的指针存储指针的地址

//二级指针一般用于改变一个字符串指针的指向,指向不同的字符串

*/

#include<stdio.h>

#include<stdlib.h>

char str1[20] = "notepad";
char str2[20] = "tasklist";
/*
   把这两个字符数组作为全局变量

*/

// 函数有副本机制,形式参数会开辟内存,新建一个变量,容纳传递过来的实际参数的值

void change(char** _p2)
{

/*
现在我需要写一个函数能够更改 p变量的值,该怎么做呢???

我们要更改一个变量,需要该变量的地址,如果变量是指针就需要二级指针

更改一个变量的值:  只有通过地址的形式访问该变量然后对其进行修改重写

因此,我们可以把传递过来该变量的地址即:该变量的指针

*/

*_p2 = str1;  //改变指针的指向

}

void main()

{

char *p = str1;    //指针指向字符串
/*
当创建一个指针指向一个字符串时,*p 就是字符串的内容

*/

printf("\n%p\n", &p);   //打印指针地址

char ** p2 = &p;

change(p2);

system(p);

getchar();

}

原文地址:https://www.cnblogs.com/linux-bfbdxj520/p/10429458.html

时间: 2024-10-11 23:41:49

使用指针做形参来解决函数的副本机制的相关文章

【C语言】二维指针做形参

转自:http://hi.baidu.com/gpmzccqceabimqq/item/f499f057aa1520404eff208b 关键: 传入时强制类型转换 + 使用时自己手工寻址 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间. 正文: 首先,我引用了谭浩强先生编著的<C程序设计>上面的一节原文,它简要介绍了如

指针做形参做局部变量以及内存分配

指针做形参做局部变量以及内存分配 一级指针做形参:首先一定要明白形参和你传递参数的那个实参是两个不同的变量,即使同名也还依然不同.指针传递的是一个变量或者一个值的地址,但是它本身还是采用值传递的方式.即你不能使它指向另外一块地址,但是你可以改变它指向的空间里存的值. 二级指针做形参:二级指针也是传值,但是他指向的地址是个一维指针,所以可以改变二维指针指向的地址空间里的内容也就是要申请空间的一维指针,不能改变二维指针本身的值,即不能让他指向一个新的一维指针.所以二维指针传递的是一个一维指针. 具体

二级指针的形参问题

草草嗒!下面的程序myMalloc是没有返回值的!害我想半天=.= 用一级指针同样可以实现程序2,但需要返回值. 总结:二级指针做形参时,操作的对象已经不是临时变量了:而一级指针操作的是临时变量. ====下面的已经没价值了=============================== 程序1:  void  myMalloc(char  *s)  //我想在函数中分配内存,再返回  {       s=(char  *)  malloc(100);  }   void  main()  {  

C语言 指针基础篇 数组,函数与指针的运用 2 14

下面看看如何在函数中运用指针吧 下面是往函数传入指针的简单操作,不是传入数组的.判断一个a是否大于b是的话给,是的话对其进行操作,不是的话就直接返回. 1 #include <stdio.h> 2 int main(){ 3 int num1,num2,*p1,*p2; 4 p1 = &num1,p2=&num2; 5 scanf("%d%d",&num1,&num2); 6 7 int fun(int *n1,int *n2); //我们在

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

一.形如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

指向指针的指针做函数的参数(转载)

一. 回顾指针概念:  今天我们又要学习一个叫做指向另一指针地址的指针.让我们先回顾一下指针的概念吧!  当我们程序如下申明变量:  short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示.  内存地址→6     7      8     9     10     11    12    13     14    15  ---------------------------------------------------

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

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

【通过操作指针,与指针做函数參数&amp;#39;实现字串在主串中出现的次数,然后将出现的部分依照要求进行替换 】

#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 会出错的!!!!不能读取操作系统的数据

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

#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 会出错的!!!!不能读取操作系统的数据