C:指针函数一些误区

当我们学完指针,知道每个数在内存中都占有一定的字节,也就是地址,才有取地址符号&,所以要交换两个数必须把这两个数所对应的内存互换,比如a=2;b=3;要让它们互换且输出,我们用一个函数来试试

 1 #include "stdio.h"
 2 int temp(int x,int y)
 3 {
 4     int c;
 5     c=x;
 6     x=y;
 7     y=c;
 8     }
 9 void main()
10 {
11     int a,b;
12     a=2;
13     b=3;
14     temp(a,b);
15     printf("a=%d,b=%d",a,b);
16 }

很显然,这个方法并不行,它只是在表面互换a,b的值,并且函数只有在运行的时候是有内存的,当结束时,函数的内存便撤掉,让我们再看一个更让人误解的例子:

 1 #include "stdio.h"
 2 int temp(int x,int y)
 3 {
 4 int *p,*q,t;
 5 p=&x;
 6 q=&y;
 7 t=*p;
 8 *p=*q;
 9 *q=t;
10 }
11 void main()
12 {
13    int a,b;
14    a=2;
15    b=3;
16    temp(a,b);
17    printf("a=%d,b=%d",a,b);
18 }

上面函数用了指针为什么还是不行?其实跟上一个例子差不多,在主函数main()中调用temp(a,b)作为实参传递给int temp(int x,int y)形参期间传递的是值2,3;并不是a,b的地址,然后取的是2,3的地址,结果就是2,3的地址互换,然而a=2,b=3还是没变,接下来看个正确是例子:

 1 #include "stdio.h"
 2 int temp(int *p,int *q)
 3 {
 4 int t;
 5 t=*p;
 6 *p=*q;
 7 *q=t;
 8 }
 9 void main()
10 {
11     int a,b;
12     a=2;
13     b=3;
14     temp(&a,&b);
15     printf("a=%d,b=%d",a,b);
16 }

运行结果:,这时实参是temp(&a,&b);互换a,b的地址。

时间: 2025-01-04 04:16:18

C:指针函数一些误区的相关文章

指针数组、数组指针、函数指针、指针函数总结

指针数组 && 数组指针 char *a[5]; //定义一个指针数组, 数组的元素都是char *指针类型.初始化也可以在里面存放字符或字符串.a的类型是char *[5] //若char *a[5]={"red","white","blue","dark","green"}; //a在这里的类型是char *[],实质上是一个二级指针.也就是说a所代表的那块内存里面存放着的是数组中第一个

指针数组、数组指针、函数指针、指针函数总结C++

指针数组.数组指针.函数指针.指针函数总结 2014-11-11 指针数组 && 数组指针 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 char *a[5];      //定义一个指针数组, 数组的元素都是char *指针类型.初始化也可以在里面存放字符或字符串.a的类型是char *[5] //若char *a[5]={"red","white","blue","dark",&qu

数组指针、指针数组、函数指针、指针函数 -----笔记

1.数组的四种访问方式 定义数组 a[]; 指针 *p 指向数组a; (1) 利用数组的下表进行访问 a[i]; (2) 数组名+地址的偏移量i *(a+i) (3) 利用指针 p 进行下表访问 p[i] (4) 指针p + 地址的偏移量i *(p+i) 一维数组数组名:相当于一个单指针 2. 数组指针(指针)     指针数组(数组) 函数指针(指针)     指针函数(函数)    -------->只看后边两个字就能够区分是指针还是数组或函数 _______________________

【转】 指针函数与函数指针的区别

一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示: float *fun();

函数指针和指针函数

(1)函数指针 函数指针就是指向函数的指针变量,即本质是一个指针变量. int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 指向函数的指针包含了函数的地址,可以通过它来调用函数.声明格式如下:        类型说明符 (*函数名)(参数) (2)指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y);

指针函数与函数指针

指针函数与函数指针:函数名之前的指针×是不是被括号包含,如果被包含就是函数指针,反之则是指针函数. 1.指针函数是指带指针的函数,即本质是一个函数,函数返回时某一个类型的指针 类型符 *函数名(参数名) 指针函数的返回值是一个地址值,指针函数一定有函数返回值,而至在主调函数中函数返回值必须赋值给同类型的指针变量: float *fun(); float *p = fun(); 2.函数指针是指向函数的指针变量,即本质是一个指针变量 int (*f)(int x) f =func; 指向函数的指针

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,

深入理解 [指针函数] 、[函数指针]、[指针的指针]、[指向指针数组的指针]

指针函数 1.指针函数是指带指针的函数,即本质是一个函数.当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中. 函数返回类型是某一类型的指针: 格式: 类型标识符  *函数名(参数表) int *match(void *key_x,void *key_y); 解析:首先来说它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针

函数指针与指针函数返回值的区别

指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针定义: 类型标识符 *函数名(参数表)eg: int *f(x,y);函数指针是指向函数的指针变量,即本质是一个指针变量.int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 函数指针与指针函数返回值的区别,码迷,mamicode.com