当我们学完指针,知道每个数在内存中都占有一定的字节,也就是地址,才有取地址符号&,所以要交换两个数必须把这两个数所对应的内存互换,比如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. 浅析php命名空间

    介绍 印象中只有java代码才会用到一大堆的import,当初看到后一脸懵逼并对php心生自豪:还是我大php牛逼够简洁,殊不知php也有命名空间这一说,这些年用的越来越多.那么,为什么要搞那么麻烦呢 ...

  2. 0:A+B Problem-poj

    0:A+B Problem 总时间限制:  1000ms 内存限制:  65536kB 描述 Calculate a + b 输入 Two integer a,,b (0 ≤ a,b ≤ 10) 输出 ...

  3. 内网神器-Bettercap

    安装bettercap 1 2 root@sch01ar:~# apt-get update root@sch01ar:~#  apt-get install bettercap 安装完成后查看一下帮 ...

  4. 用python批量修改文件名

    从youtube上当下来百来首mv,每个都需要去掉视频,这还挺好弄得,格式工厂一弄就完了,但是文件名,都带有乱七八糟的*啥的巴拉巴拉的,咋修改啊,几百首总不可能一个一个rename吧 #批量修改文件名 ...

  5. dijkstra最小花费

    //Gang #include<iostream> #include<cstring> #include<algorithm> #include<cstdio ...

  6. svn搭建文档

    1.制作本地yum源 a)挂载光盘 [root@localhost ~]# mount  /dev/cdrom  /mnt b)删除/etc/yum.repos.d目录所有的repo文件 [root@ ...

  7. Exif Info 隐私政策

    隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...

  8. Java调用C# DLL

    由于项目需要,利用了短信猫,但是一个短信猫会加载多个串口,而只需要其AT口,通过java代码,获取其AT口对应的串口号比较困难,于是通过C#获取,这里直接调用C#生成的DLL,但java不能直接调用C ...

  9. .NET Core快速入门教程 1、开篇:说说.NET Core的那些事儿

    一..NET Core的诞生 聊 .NET Core,就不得不说他的爸爸 .NET.当年Java刚刚兴起,如火如荼,微软也非常推崇Java,当时Windows平台的Java虚拟机就是微软按照JVM标准 ...

  10. Ubuntu 16.04 安装wine QQ

    1.进入 http://www.ubuntukylin.com/application/show.php?lang=cn&id=279下载Wine QQ 2.解压压缩包 3.将文件夹中三个de ...