精华内容
下载资源
问答
  • 今天两个简单的例子理一理C语言中指针做函数参数时的情况:交换px,py的指向/*函数和指针交换px,py的指向*/#include <stdio.h>void exchange(int **p1,int **p2)/*函数无返回值,两个二级指针作为...

    今天用两个简单的例子理一理C语言中指针做函数参数时的情况:
    • 交换px,py的指向

    第一段:/*用函数和指针交换px,py的指向*/
    #include <stdio.h>
    void exchange(int **p1,int **p2)
    /*函数无返回值,两个二级指针作为形参,存实参指针的地址,通过地址
    改变其指向单元即实参值,而实参是指针的地址,从而改变实参指针的指向*/
    {
     int *pt;
     pt=*p1;
     *p1=*p2;
     *p2=pt;
    }
    int main()
    {
     int x,y;
     int *px=&x,*py=&y;
     printf("输入x,y:");
     scanf("%d%d",&x,&y);
     exchange(&px,&py);
     printf("%d %d\n",x,y);
     printf("%d %d\n",*px,*py);
     return 0;
    }

    运行结果:输入x,y:1 2

    1 2
    2 1

    第二段:/*用函数和指针交换px,py的指向*/
    #include <stdio.h>
    void exchange(int *p1,int *p2)
    /*两个int *型形参存实参的值即主函数中x,y的地址值,
    交换后p1存y的地址值,p2存x的地址值但函数无返回值,
    调用完毕后空间释放,实参的值并未改变*/
    {
     int *pt;
     pt=p1;
     p1=p2;
     p2=pt;
    }
    int main()
    {
     int x,y;
     int *px=&x,*py=&y;
     printf("输入x,y:");
     scanf("%d%d",&x,&y);
     exchange(px,py);
     printf("%d %d\n",x,y);
     printf("%d %d\n",*px,*py);
     return 0;
    }
    运行结果:输入x,y:1 2
    1 2
    1 2
    注意一下,这里第二段代码是不能达到题目要求的!
    • 用指针求数组最大值

    第一段:
    /*用函数和指针求数组最大值*/
    #include <stdio.h>
    #include <stdlib.h>
    int fmax(int a[],int n)//函数返回值为int型
    {
     int i,max=*a;
     for(i=0;i<n;i++)
      if(*(a+i)>max)
       max=*(a+i);
     return max;//返回max的值
    }
    int main()
    {
     int i,n,max;
     printf("输入数组元素个数:");
     scanf("%d",&n);
     int *a=(int *)malloc(sizeof(int)*n);//申请动态分配内存空间
     printf("依次输入数组元素:");
     for(i=0;i<n;i++)
      scanf("%d",a+i);//这里a+i和&a[i]等价
     max=fmax(a,n);//调用函数,max等于函数的返回值max
     printf("max=%d\n",max);
     return 0;
    }
    第二段:

    /*用函数和指针求数组最大值*/
    #include <stdio.h>
    #include <stdlib.h>
    void fmax(int a[],int n,int *pm)
    /*函数无返回值,这里加了一个int*类型的形参,
    存实参的地址,通过地址改变其指向单元的值*/
    {
     int i;
     *pm=*a;
     for(i=0;i<n;i++)
      if(*(a+i)>*pm)
       *pm=*(a+i);
    }
    int main()
    {
     int i,n,max;
     printf("输入数组元素个数:");
     scanf("%d",&n);
     int *a=(int *)malloc(sizeof(int)*n);
     printf("依次输入数组元素:");
     for(i=0;i<n;i++)
      scanf("%d",a+i);
     fmax(a,n,&max);
     /*还可以定义一个int *型指针p指向max,将实参中的&max改为p*/
     printf("max=%d\n",max);
     return 0;
    }
    第三段:

    /*用函数和指针求数组最大值*/
    #include <stdio.h>
    #include <stdlib.h>
    void fmax(int a[],int n,int **ppm)
    /*函数无返回值,这里是一个二级指针存实参(指针)的地址,
    通过两次指向改变max的值*/
    {
     int i;
     **ppm=*a;
     for(i=0;i<n;i++)
      if(*(a+i)>**ppm)
       **ppm=*(a+i);
    }
    int main()
    {
     int i,n,max;
     int *pm=&max;
     printf("输入数组元素个数:");
     scanf("%d",&n);
     int *a=(int *)malloc(sizeof(int)*n);
     printf("依次输入数组元素:");
     for(i=0;i<n;i++)
      scanf("%d",a+i);
     fmax(a,n,&pm);//实参传给形参的是指针的地址
     printf("max=%d\n",max);
     return 0;
    }

    运行结果:
    输入数组元素个数:5
    依次输入数组元素:6 923 2 33 190
    max=923

    到这里结束,注释中写到了一点自己的理解,哪里有错误还请见谅和指教~

    展开全文
  • 用指针做函数参数的好处, 首先要理解函数传参的过程,函数传参是复制型的,例如 void modify(int a) { a++; } void main() { int a=5; modify(a); printf("%d",a); } 程序执行完之后,a的值还是5,为...

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

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

    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地址上面的内容进行操作,用指针作为函数参数的时候,在参数传递的时候其实也是另外开辟了一个存储空间,然后把指针的值复制过去,然后函数对新开辟的这个存储空间里面的这个指针变量进行操作。

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

    转载于:https://www.cnblogs.com/cumtchw/p/4726606.html

    展开全文
  • 用指针做函数参数自己编程实现字符串连接函数strcat()的功能。CQUPT题库 下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。 注意:请将修改正确后的完整源程序拷贝粘贴到答题区内。 ...

    用指针做函数参数自己编程实现字符串连接函数strcat()的功能。CQUPT题库
    下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
    注意:请将修改正确后的完整源程序拷贝粘贴到答题区内。
    对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。
    当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。
    经教师手工核对后,如果未用指针做函数参数编程,那么即使做对也不给分。
    改错时不能改变程序原有的意图,不能改变函数原型。

    #include <stdio.h>
    #define N = 80;
    void MyStrcat(char *dstStr, char *srcStr);
    main()
    {
        char s[N], t[N];
        printf("Input a string:\n");
        gets(s);
        printf("Input another string:\n");
        gets(t);
        MyStrcat(s, t);
        printf("Concatenate results:%s\n", s);
    }
    void MyStrcat(char *dstStr, char *srcStr)
    {
        while (*srcStr != '\0');
        {
            srcStr++;
        }
        while (*srcStr != '\0');
        {
            *dstStr = *srcStr;
            srcStr++;
            dstStr++;
        }
    }
    
    

    答案

    #include <stdio.h>
    #define N  80   //宏定义出现了格式错误
    void MyStrcat(char *dstStr, char *srcStr);
    main()
    {
        char s[N], t[N];
        printf("Input a string:\n");
        gets(s);
        printf("Input another string:\n");
        gets(t);
        MyStrcat(s, t);
        printf("Concatenate results:%s\n", s);
    }
    void MyStrcat(char *dstStr, char *srcStr)
    {
        while (*dstStr!= '\0') 
        {
            dstStr++;        //循环将S字符串的地址推向末尾
        }
        while (*srcStr != '\0')     //注意while后面没有分号,有分号不会进入内部循环语句!
        {
            *dstStr = *srcStr;     //将t的第一个往后依次赋给s ,*XX 代表指向取出值
            srcStr++;              //地址++
            dstStr++;              //地址++
        }
        *dstStr ='\0';
    }
    
    展开全文
  • 辨析指针实参传入函数为何会是改变保留下来

        首先,无论是将变量还是指针作为实参传入函数。都是“值传递”方式,即:都是把变量(指针变量)里存的值复制一份保存到形参变量里。所以无论形参变量怎样变化也改变实参的值。但是传入指针却有些特别。因为它是复制了指针(地址)。所以当传参后,就会实参,形参都指向同一个变量的地址(即:实参本来指向的那个变量)。当函数中对形参指向对象(*指针形参名)进行操作时,直接改变了函数外那个变量。当函数调用结束后,再用实参引用那个变量,就会显示修改后的值。

        这就是区别。2015-5-19

    展开全文
  • 函数参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。 它的作用是将一个变量的的地址传给被调用函数的形参。 e.g. 输入两个数,按由大到小顺序输出 #include&lt;iostream&gt; using ...
  • swap_1:用指针做函数参数,指针传的是地址,肯定可以通过修改形参指针变量所指向的值,来打到修改 a与b的值。 swap_3:如果仅仅只是值传递,只能从实参向形参传数据,形参的值的改变无法传回实参。 除此之外, ...
  • c语言中的二级指针做函数参数

    千次阅读 2018-03-27 11:19:43
    1.用指针做函数参数申请动态内存的问题 //如果函数参数是指针,不能用一级指针做函数参数实现申请动态内存 void getMemory(char *p, int num) { p = (char *)malloc(sizeof(char)*num); } void main() { char *...
  • /*指向数组的指针做函数参数*/ #include <stdio.h> /*int(*p)[m]表示p被定义为指向一维整形 数组的指针变量,这个一维数组有m个类型为int(*p)[m]的元素 */ #include <stdlib.h> int main(void){ void ...
  • 1、指针函数是指带指针函数,即...函数返回值必须同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 表示: float *fun(); float *p;
  • 对于指向多维数组的指针做函数参数一些认识 首先,我们知道,一维数组可以作为函数参数,同时,多维数组也可以作为函数参数,用来接收实参组名传来的地址。可以有两种方法:指向变量的指针变量和指向一维数组...
  • 函数指针做函数参数

    2018-04-09 22:02:00
    //本质是一种变量,专门用做指向函数,变量名为myFuncVar。  我们可以这样定义并赋值:  int add();  int (*myFuncVar)(int a, int b) = add;  也可以这样定义并赋值:  int add();  int (*myFuncVar)(....
  • 题目:有两个整数,输入a和b。...//指向函数的指针做函数参数 #include <stdio.h> void main(){ int max(int x,int y); int min(int x,int y); int add(int x,int y); int fun(int x...
  • /* *程序的版权和版本声明部分: ... *All rights reserved. *文件名称: *作者:刘晓晓 ...*完成日期:2013年 12月10号 ...*问题描述:用指针做函数参数的方法比较两个数的大小 *程序输出:无 *问题分析: *算法设计:
  • #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> //回调函数 //第一个参数是一个万能指针,用来接收用户输入的数据------因为我们不知道用户会输入什么样的数据类型,...//回调函数的第二个参数 void myPri
  • 例题 有一个结构变量s,含有学号、姓名、性别和成绩4 个成员,要求在main函数中输入结构体变量成员的数值,在另一个函数中输出结构体变量成员的数值。 代码 #include&lt;stdio.h&gt; struct student {long ...
  • 1、指针做函数参数 示例: package main //必须有个main包 import "fmt" func swap(p1, p2 *int) { *p1, *p2 = *p2, *p1 } func main() { a, b := 10, 20 //通过一个函数交换a和b的内容 ...
  • 接着上一节使用,将数组名作为函数参数改变成将指针座位函数参数: #include //改变上一个章节,冒泡排序法和指针来排序 void bubblesort(int *,int);//函数的声明使用指针 int main() { int a[10]={3,-9,2,5,...
  • 指针铁律4:应用指针必须和函数调用相结合(指针做函数参数指针做函数参数,问题的实质不是指针,而是看内存块,内存块是1维、2维。 1)如果基础类int变量,不需要用指针; 2)若内存块是1维、2维。 铁律5...
  • 指针做函数参数的两种情况 1.问题 不理解下面的代码为什么可以二级指针来接,不是应该三级指针来接吗?? 映像中一直觉得,一级指针要二级指针来接。 既n级指针要n加1级指针来接。 所以第一反应是二级指针做...
  • 函数指针做函数参数的意义

    千次阅读 2016-08-08 21:10:52
    int Oper(int (*MyPointerFuncAdd)...这样的话,这要是这个函数类型的函数,传入不同的函数名,就能执行不同的函数体,这种方法实现了类似于C++中的多态的形式。 在工程中,函数指针主要是正向调用和反向调
  • #include <stdio.h>#include <math.h> //求N次方的值int* function1(int *p,int index){*p = pow(*p, ...int main(int argc, char* argv[]){//用指针 做函数参数 和返回值 int i = 1;int *p = &...
  • 将字符串从一个函数传递到另一个函数,可以字符数组名作为实参,还可以字符指针作实参,将字符串的首地址传递到另一个函数中。 例如 题目 应用字符指针函数,求一个字符串的长度。 p.s.实际上就是strlen()...
  • 指针专题二:指针做函数参数(间接赋值)是指针存在最大意义1、*p间接赋值成立条件:3个条件1)2个变量(通常一个实参,一个形参)2)建立关系,实参取地址赋给形参指针3)*p形参去间接修改实参的值2、间接赋值的应用...
  • 以指针作为函数参数[1]为什么需要用指针做参数?需要数据双向传递时(引用也可以达到此效果)用指针作为函数的参数,可以使被调函数通过形参指针存取主调函数中实参指针指向的数据,实现数据的双向传递。(实际上传...
  • 1 #include<stdio.h> 2 #define FORMAT "%d\n%s\n%f\n%f\n%f\n" 3 struct student 4 { 5 int num; 6 char name[20]; 7 ...
  • /*指向函数的指针做函数参数 */ #include <stdio.h> /*指向函数的指针变量的一个重要用途是把函数的地址作为参数传递到其他函数*/ #include <stdlib.h> int main(void){ int max(); int min(); void ...
  • 有些时候我们无法及时确定函数的处理逻辑,程序需要动态的改变,这时我们可以通过定义函数指针来实现。 举个????,我们有加法,乘法两个...我们定义一个中间函数,其他函数作为指针参数传递进来,这样就可进行动...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,084
精华内容 433
关键字:

用指针做函数参数