易截截图软件、单文件、免安装、纯绿色、仅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变量,因为这个字符包 ......

Oracle OCI programming and Borland C++ Builder

As you may know, Oracle dropped support for Borland Compilers in OCI
some time back. Well, it isn't all that hard to set up again.
I'm running 9i Release 2 Enterprise Edition on this PC at work and I am
using Borland C++ Builder 6 to 'play' with OCI programming - I intend to
build a set of compo ......

Java调用C/C++ – JNI

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

【转】c判断大端小端模式

试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
解答:
int checkCPU( )
{
    {
           union w
           {  
  &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号