当我们学完指针,知道每个数在内存中都占有一定的字节,也就是地址,才有取地址符号&,所以要交换两个数必须把这两个数所对应的内存互换,比如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」手起刀落-一起来写经典的贪吃蛇游戏

    回味 小时候玩的经典贪吃蛇游戏我们印象仍然深刻,谋划了几天,小时候喜欢玩的游戏,长大了终于有能力把他做出来(从来都没有通关过,不知道自己写的程序,是不是能通关了...),好了,闲话不多谈,先来看一下效 ...

  2. openvpn技术实现客户端直接访问远程机器中docker内容器的实现与原理

    传统开发中如果要从开发机中访问服务器中的docker中的服务可能可能需要如下方案: 利用docker run的-p属性直接映射端口到服务器中 优点:客户端直接访问服务器就可以访问到docker容器. ...

  3. CentOS环境下Docker私有仓库搭建

    本文讲述如何搭建docker私有仓库. 有了docker hub,为什么还要搭建docker私有仓库? 1.性能考虑:docker hub的访问要通过互联网,性能太低. 2.安全性:更多的时候,镜像不 ...

  4. [WPF]本地化入门

    1. 前言 WPF的本地化是个很常见的功能,我做过的WPF程序大部分都实现了本地化(不管最终有没有用到).通常本地化有以下几点需求: 在程序启动时根据CultureInfo.CurrentUICult ...

  5. SQL Server 日志清理

    --SQL2005: Backup Log DNName with no_log --这里的DNName是你要收缩的数据库名,自己注意修改下面的数据库名,我就不再注释了. go dump transa ...

  6. 10.0.0.55_12-16训练赛部分writeup

    0x1 - MISC MISC100 一张帅行的照片 目测是图片隐写,但是binwalk并没有出来,应该是对文件头进行了修改 010editor查看一下,发现在jpg文件尾之后还有大量的数据 而且在灰 ...

  7. linux mysql定时备份

    项目需要定时备份数据库,以下是自己的操作笔记 1.检查磁盘空间 # df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 3.6 ...

  8. Java开发小技巧(三):Maven多工程依赖项目

    前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...

  9. 分享一波eclipse常用快捷键

    Eclipse快捷键 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. 1. ctrl+shift ...

  10. Cocos2d-X使用CCAnimation创建动画

    动画在游戏中是很常见的 程序1:创建一个简单的动画 首先须要在project文件夹下的Resource文件夹中放一张有各种不同动作的图片 在程序中加入以下的代码 #include "Anim ...