关于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
相关文档:
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 ......
昨天才看到,但是遇到一些问题,今天解决了,记下……(参考:http://netbeans.org/kb/55/beginning-jni-part1.html)
我用的是Netbeans 6.7,但是和其他的也应该大同小异吧。 基本流程: Java这边的:
创建java文件(带native的),还要记得在类中加入:System.loadLibrary(xxx) 。
然后用javah来生成C/ ......
1.引言
本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样 ......
C++与Java基本数据类型及所占用内存空间比较
----------------C++
----------- ------------Java
----------
(01)bool-------- ......