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

 #include "stdio.h"
int temp(int x,int y)
{
int c;
c=x;
x=y;
y=c;
}
void main()
{
int a,b;
a=;
b=;
temp(a,b);
printf("a=%d,b=%d",a,b);
}

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

 #include "stdio.h"
int temp(int x,int y)
{
int *p,*q,t;
p=&x;
q=&y;
t=*p;
*p=*q;
*q=t;
}
void main()
{
int a,b;
a=;
b=;
temp(a,b);
printf("a=%d,b=%d",a,b);
}

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

 #include "stdio.h"
int temp(int *p,int *q)
{
int t;
t=*p;
*p=*q;
*q=t;
}
void main()
{
int a,b;
a=;
b=;
temp(&a,&b);
printf("a=%d,b=%d",a,b);
}

运行结果:aaarticlea/png;base64,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" alt="" />,这时实参是temp(&a,&b);互换a,b的地址。

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

  1. 明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064

    看到“明显调用的表达式前的括号必须具有(指针)函数类型”这句时我才发现我的语文水平有多烂,怎么看都看不懂,折腾了半天才知道是哪里出了问题. 举个简单的例子 class CTest { void (CT ...

  2. C语言回顾-内存管理和指针函数

    1.fgets()函数 该函数是一个文件操作相关的函数 暂时使用这个函数可以从键盘上接收一个字符串,保存到数组中 char str[50]; 1)scanf("%s",str);/ ...

  3. c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

    1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...

  4. PHP中使用数组指针函数操作数组示例

    数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...

  5. 指针数组vs数组指针 指针函数vs函数指针

    在分辨这些重要的概念时,我们先回顾一下前面所讲的C之三值合一,由于三个值所求出的地址是相同的,所以经常有传言说他们都是首元素的地址.这种说法是不正确的.为什么说它是不正确的呢? 首先定义一个指针,将三 ...

  6. C ~ 指针函数与函数指针的区别

    一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...

  7. c语言指针函数与函数指针

    例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...

  8. C++函数指针和指针函数

    本文参考http://www.prglab.com/cms/pages/c-tutorial/advanced-data/pointers.php http://blog.csdn.net/ameyu ...

  9. typedef 用法及 指针函数 和 函数指针

    typedef 本质上是定义了一种新的类型, 该新类型可以原有类型的别名或是原有类型的组合. 而#define 只是字符串的替换. 如定义: typedef char* CHARP; 则 CHARP ...

随机推荐

  1. [读书笔记]javascript语言精粹'

    人比较笨,以前只做项目,案例,然而一些javascript的很多理论不知道该怎么描述,所以最近开启一波读书之旅: 标识符 1.定义 标识符以字母开头,可能后面跟上一个或多个字母.数字或者下划线. 2. ...

  2. “战术竞技类”外挂打击已开始!揭秘腾讯We Test游戏安全服务新动作!

    商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/353.html We Test导读 国服PUBG的游戏安全将由我 ...

  3. 解决WebSocket兼容ie浏览器版本问题

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7942323.html 在使用Netty进行WebSocket开发时,测试发现:ie 11系列个别低版本连接W ...

  4. JAVA的向上转型和向下转型怎么理解呢?

    在定义中是子类向父类转型称为向上转型,父类向子类转型是向下转型(必须先向上转型过,才能向下转型), 但是在下面类定义后,我得到的结果却不同.求大佬解惑 class superclass{ public ...

  5. 迭代子模式(Iterator)

    迭代子模式(Iterator) 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松.这句话包含两层意思:一是需要遍历的对象,即聚集对 ...

  6. Javascript-数值运算 保留小数点位数,并对最后一位小数各种取整方法

    今天遇到Javascript数值运算的坑,说到底,还是用得少啊.得多用多敲代码多遇坑. 先介绍以下三个Javascript number取整运算方法. Math.floor() 对一个数退一取整 例: ...

  7. 自己动手编写IOC框架(二)

    万事开头难,上篇已经起了一个头,之后的事情相对就简单了.上次定义了框架所需的dtd也就是规定了xml中该怎么写,有哪些元素.并且我们也让dtd和xml绑定在了一起,使dtd对xml的格式进行校验,并且 ...

  8. poj 3111 K Best 最大化平均值 二分思想

    poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...

  9. 音频传输之Jitter Buffer设计与实现

    在语音通信中Jitter Buffer(下面简称JB)是接收侧一个非常重要的模块,它是决定音质的重要因素之一.一方面它会把收到的乱序的语音包排好序放在buffer里正确的位置上,另一方面它把接收到的语 ...

  10. 16进制到byte转换

    我们经常会看到这样的语法 (byte) 0xAD 0xAD实际是个16进制,转换成二进制为:10101101,转换成10进制是:173,它是个正数 10101101只是int的简写,int由4个byt ...