C:指针函数一些误区
当我们学完指针,知道每个数在内存中都占有一定的字节,也就是地址,才有取地址符号&,所以要交换两个数必须把这两个数所对应的内存互换,比如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:指针函数一些误区的更多相关文章
- 明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064
看到“明显调用的表达式前的括号必须具有(指针)函数类型”这句时我才发现我的语文水平有多烂,怎么看都看不懂,折腾了半天才知道是哪里出了问题. 举个简单的例子 class CTest { void (CT ...
- C语言回顾-内存管理和指针函数
1.fgets()函数 该函数是一个文件操作相关的函数 暂时使用这个函数可以从键盘上接收一个字符串,保存到数组中 char str[50]; 1)scanf("%s",str);/ ...
- c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针
1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...
- PHP中使用数组指针函数操作数组示例
数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...
- 指针数组vs数组指针 指针函数vs函数指针
在分辨这些重要的概念时,我们先回顾一下前面所讲的C之三值合一,由于三个值所求出的地址是相同的,所以经常有传言说他们都是首元素的地址.这种说法是不正确的.为什么说它是不正确的呢? 首先定义一个指针,将三 ...
- C ~ 指针函数与函数指针的区别
一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...
- c语言指针函数与函数指针
例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...
- C++函数指针和指针函数
本文参考http://www.prglab.com/cms/pages/c-tutorial/advanced-data/pointers.php http://blog.csdn.net/ameyu ...
- typedef 用法及 指针函数 和 函数指针
typedef 本质上是定义了一种新的类型, 该新类型可以原有类型的别名或是原有类型的组合. 而#define 只是字符串的替换. 如定义: typedef char* CHARP; 则 CHARP ...
随机推荐
- 泛型里的super和extend
<? extends T>和<? super T>应该怎么用? 网上看到一些比较难懂的回答,但是在EffectiveJava(2th Edition)遇到简单明了的解释: If ...
- Less的@import指令
Less的@import指令 Less中,可以通过 @import指令来导入外部文件.@import指令可以放在代码中的任何位置,导入文件时的处理方式取决于文件的扩展名: 如果扩展名是 .css,文件 ...
- 在Github发布自己的compile包
Android入门到转行做服务员--在Github发布自己的compile包 2017-12-05 15:27:10 这是一粒代码发布的第一篇博客,一粒代码从事android开发,近期打算开始搞搞博客 ...
- [转] linux系统中如何进入退出vim编辑器,方法及区别
原文链接:http://www.cnblogs.com/crazylqy/p/5649860.html 在linux家族中,vim编辑器是系统自带的文本编辑器,其功能强大自不必说了. 偶有小白,刚接触 ...
- 搭建一个属于自己的webpack config(-)
搭建一个属于自己的webpack config(-) 前期准备 环境说明 mac 10.12.6 node v8.8.1 npm 5.4.2 全局安装下webpack.webpack-dev-serv ...
- Outlook邮箱配置
1.在outlook邮箱里启用pop3 2.接收邮件服务器 pop3-mail.outlook.com 3.发送邮件服务器 smtp-mail.outlook.com 4.其他设置 -->发送服 ...
- 51Nod 1284 2 3 5 7的倍数 容斥原理
1284 2 3 5 7的倍数基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 1 ...
- Linux中nginx手动安装
本分类下有一个环境一键安装.那这背后发生了什么呢?咱们手动使用源码进行安装. 1.首先保证有一个能联网的centos. 2.百度 ningx 官网 点download http://nginx. ...
- Nginx实现https网站配置
咱们下面以google代理实现的方式来实现https.注意这里的https与google的https无关. 代码如下.有备注/usr/local/nginx/config/vhost/hk.cn331 ...
- 如果nginx启动失败,错误解决
解决上面问题: /usr/sbin/groupadd -f www /usr/sbin/useradd -g www www 这方法常见出现时反向代理时,ssl的授权用户不存在的情况下出现的:.