易截截图软件、单文件、免安装、纯绿色、仅160KB

关于C/C++中指针做形参的一点小分析(转)

 
2009-07-26 15:50
今天寝室的山东兄弟在练二级的上机,其中一个题目大概是这样:在一个函数中,有一个指针形参,记为*p,然后在函数内部定义了临时变量a,a和*p是同种类型。经过一系列计算 ,a得到了一个值,这个值最后是需要记录在指针*p里面的,应该怎么保存呢?我当时随便就说,p=&a。结果发生错误了,没有得到预期结果。正确答案是*p=a。
下面来分析下原因。
学过C的人都知道到,函数的实参与形参的之间是值传递,单向传递。在谭浩强那本C语言教材中就有这样一个经典的例子:
int a=3,b=4;
void exchange(int x,int y)
...{  
          int temp;
           temp=a;a=b;b=temp;   //试图交换a,b
}
exchange(a,b);
cout<<a<<" "<<b<<endl;
输出的来的仍然是3,4.
要交换a,b,只需改变函数exchange,传递a,b的地址,如下:
void exchange(int *x,int *y)
{
         int temp;
          temp=*x;*x=*y;*y=temp;
}
   exchange(&a,&b);
   cout<<a<<" "<<b<<endl;
  
这样,a,b就成功交换了。为什么呢?下面再说。
再回到开始提出的那个问题,为什么p=&a错误而*p=a正确呢?
再看两段代码:
#include<iostream>
using namespace std;
void test_point(int *p)
...{
     int a=3;
      p=&a;   // 不同之处
}
int main()
...{
     int x=4;
     int *p1=&x;
      test_point(p1);
      cout<<*p1<<endl;
         return 0;
}
   
   
此时输出的结果是4,也就是说,指针p1调用test_point函数后值并没有得到改变,接着看下一段代码
#include<iostream>
using namespace std;
void test_point(int *p)
...{
     int a=3;
   &nb


相关文档:

C /C++ 输入输出流

前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终于有点时间了,决定找本书,好好整理一下,和大家共享。
C++I/O
C++支持两种I/O,第一种是从C语言继承来的,一种是由C++定义的面向对象I/O系统。
1、int getchar(void);返回一个整数值,也可以指定这个值为char变量,因为这个字符包 ......

Linux下C开发——gcc,gdb的使用

Linux

C
开发——
gcc

gdb
的使用
 
作者:
zccst
我们学习的过程应该是一个积累的过程,有无到有,又少到多,而不能像下山的猴子。
9
月份的时候是第一次系统学习
gcc, gdb, makefile
(详见前面博客)。如今作为嵌入式系统的一个组成部分,决定重学一次,感觉理解加深了一些。
gcc ......

c 语言常用宏定义 模板

 
常用宏定义
1、防止一个头文件被重复包含
#ifndef COMDEF_H
#define COMDEF_H
//头文件内容
#endif
2、重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。
typedef  unsigned char      boolean;     /* Boolean v ......

Java调用C/C++ – JNI

昨天才看到,但是遇到一些问题,今天解决了,记下……(参考:http://netbeans.org/kb/55/beginning-jni-part1.html)
我用的是Netbeans 6.7,但是和其他的也应该大同小异吧。 基本流程: Java这边的:
创建java文件(带native的),还要记得在类中加入:System.loadLibrary(xxx) 。
然后用javah来生成C/ ......

doxygen+VIM文档实用指南for C/C

摘要:
文档撰写是一项十分繁琐而且费力的工作,相信已经有很多人对此深感头痛。文档生成工具的出现最大限度地帮助程序员解决了这个问题,这些工具通常可以从程序源代码自动生成文档,大大方便了文档工作。这篇小东西主要介绍了如何用VIM和doxygen来快速生成注释,并用最少的额外劳动来完成专业水准的程序文档的过程。仅供 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号