当我们学完指针,知道每个数在内存中都占有一定的字节,也就是地址,才有取地址符号&,所以要交换两个数必须把这两个数所对应的内存互换,比如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. vue-router在ie9及以下history模式支持

    参考: https://www.npmjs.com/package/vue-route https://github.com/devote/HTML5-History-API 提要: ie9及以下不支 ...

  2. LINQ学习系列-----1.3 扩展方法

    这篇内容继续接着昨天的Lambda表达式的源码继续下去.昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性.    一.扩展方法介绍   废话不多说,先上源码截图: 上图中Ge ...

  3. MVC Code First(数据模型实例讲解)

    首先配置好web.config <connectionStrings> <add name="BookDbContext" connectionString=&q ...

  4. [翻译]Python List Comprehensions: Explained Visually || Python列表解析式

    原文1地址: http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/ 原文2地址: http://blog.tea ...

  5. Servlet,JSP 中的中文乱码问题以及解决方案

    问题描述: 在Servlet,JSP 传递数据中,英文无影响,而中文有时候就会出现乱码. 解决方案: 相同的编码: 同一个项目中的每个文件应当设置和保存相同的编码方式,如: html中 <met ...

  6. K-means 算法

    本学习笔记参考自吴恩达老师机器学习公开课 聚类算法是一种无监督学习算法.k均值算法是其中应用最为广泛的一种,算法接受一个未标记的数据集,然后将数据聚类成不同的组.K均值是一个迭代算法,假设我们想要将数 ...

  7. php数据分页显示基础

    一:分页原理: 所谓分页显示,也就是将数据库中的结果集认为的分成一段一段的来显示,需要两个初始的参数: 每页多少条记录 ($PageSize)? 当前是第几页($CurrentPageID)? 还有其 ...

  8. Python数据分析中 DataFrame axis=0(0轴)与axis=1(1轴)的理解

    python中的axis究竟是如何定义的呢?他们究竟代表是DataFrame的行还是列? 直接上代码people=DataFrame(np.random.randn(5,5), columns=['a ...

  9. 使用DataFlow表达ControlFlow的一些思考

    一.控制流 从接触面向过程语言开始,使用控制流编程的概念已是司空见惯. if (condition) { // do something } else { // do something else } ...

  10. 在cmd中运行android.bat报出空指针异常

    因启动SDK manager和启动AVD manager 都发生闪退现象,网上很多方法都无法解决 又在cmd 中执行运行 D:\Program Files\Android_SDK\sdk\tools& ...