IOS开发 函数传入指针,与函数传入引用的区别

sqlite3_open([oldPath2UTF8String],&oldDatabase);如上行代码,请问下大家,函数在传入指针,与传入&oldDatabase到底... sqlite3_open([oldPath2 UTF8String], &oldDatabase);
如上行代码 , 请问下大家,函数在传入指针,与传入&oldDatabase到底有什么区别啊??
展开
 我来答
天蝎神经侠侣
高粉答主

2015-07-10 · 关注我不会让你失望
知道大有可为答主
回答量:7533
采纳率:67%
帮助的人:723万
展开全部
相关概念

c++三种传递参数方式

传参数的值(称值传递,简称传值),传参数的地址(称地址传递,简称为传址),和引用传递(称为传引用),相应的函数传值调用,传址调用和传引用调用

形参、实参

函数定义时参数表中的参数称为形式参数,简称形参;函数调用时参数表中的参数称为实际参数,简称实参。实参和形参之间的数据传递称为形实结合

说明

通常情况下,C++是传值调用,它是单向的,只能从实参到形参。形参实质上市实参的一种拷贝,所以传递时不会改变外部实参的值

引用的含义及功能

即别名,功能主要是传递函数的参数和返回值

引用的规则

(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

实例
#include <iostream>
using namespace std ;
void Swap(int x, int y) ;
int main(void)
{
int a = 1 ;
int b = 2 ;

cout << "a = " << a << ", " << "b = " << b << endl ;

Swap(a, b) ;

cout << "a = " << a << ", " << "b = " << b << endl ;

system("pause") ;
return 0 ;
}

一:值传递
void Swap(int x, int y)
{
int temp = x ;
x = y ;
y = temp ;
}

输出结果:
a = 1, b = 2
a = 1, b = 2
原因:Swap(int x, int y)函数采用值传递的方式,传入的实参实际上是a和b的副本而非其本身,所以对副本的改变并不会反应到a和b本身上。

二:引用传递
void Swap(int &x, int &y)
{
int temp = x ;
x = y ;
y = temp ;
}
输出结果:
a = 1, b = 2
a = 2, b = 1
原因:Swap(int x, int y)函数采用引用传递的方式,传入的实参实际上是a和b的引用,对引用的改变会直接反应到a和b本身上。

三:指针传递
1. 改变指针本身
void Swap(int *x, int *y)
{
int *temp = x ;
x = y ;
y = temp ;
}

调用方法:Swap(&a, &b) ;

输出结果:
a = 1, b = 2
a = 1, b = 2
原因:Swap(int x, int y)函数采用指针传递的方式,传入的实参实际上是a和b的指针的副本,而且改变的是副本本身而非其间接引用,所以不会影响的指针所指向的值,即a和b本身上。
沫沫容
2015-06-19 · 知道合伙人教育行家
沫沫容
知道合伙人教育行家
采纳数:7299 获赞数:44206
2010年毕业,英语六级水平,擅长写作、翻译、同义句转换、完形填空、阅读理解等一系列题型及相关考试。

向TA提问 私信TA
展开全部
定义结构体指针

//首先定义一个结构体
struct point {
int x;
int y;
};
//重命名该结构体类型,typedef可以重命名类型,这里将struct point类型重命名成sp了
typedef struct point sp;

//定义一个sp类型的变量a,即a为结构体类型,并且为a赋值
sp a={10,20};

//输出a的两个值
printf("a.x=%d,a.y=%d",a.x,a.y);

//创建指向a的结构体指针
sp *p=&a;

//两种方式输出a的值。p->x相当于(*p).x也相当于a.x
printf("\np->x=%d,p->y=%d",p->x,p->y);
printf("\n(*p).x=%d,(*p).y=%d",(*p).x,(*p).y);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
茅坑玩蛆
2013-08-15 · TA获得超过252个赞
知道小有建树答主
回答量:188
采纳率:0%
帮助的人:44.6万
展开全部
oldDatabase是一个数据库的首地址,&oldDatabase是一个指向某个数据库的指针的首地址,此时,数据库存在不存在还不一定怎么能把它的首地址传进去呢?所以要传入一个指针的首地址,你的函数操作的是一个指针而不是指针所指向的东西,还有很多其他的事例,比如:
NSError *error; ---->此时,error未指向任何东西。
void someMethod(para1,&error)
{
//do something ...
} --------》经过这个函数的处理,假如有error,error就指向这个error,假如一切安好,则error依然是nil。。。。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
修碧白uO
2019-12-14
知道答主
回答量:1
采纳率:0%
帮助的人:672
展开全部
指针里面存储的内存地址是可以改变的,但是引用对应的存储空间里的内存地址一经赋值就不能改变
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金建彤
2013-08-19
知道答主
回答量:11
采纳率:0%
帮助的人:1.3万
展开全部
&oldDatabase 这就是指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式