指针和引用的自增(++)运算意义不一样?

 我来答
大沈他次苹0B
2022-10-03 · TA获得超过7338个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:179万
展开全部
指针和引用的自增(++)运算意义不一样?

int a=0;
int b=&a;
int *p=&a;
b++;相当于a++;b只是a的一个别名,和a一样使用。
p++;后p指向a后面的内存
(*p)++;相当于a++

捕鱼王游戏引用的自增(++)运算意义不一样?

怎么不一样?

炸 金++花棋++牌游,戏运算意义不一样?

不一样

传指针和传指针引用的区别/指针和引用的区别(

指针:(通俗理解即为一个变量在内存中的编号(地址))

例1:int b = 2;

int *p = &b;

以上例子就是将b变量在内存中的地址赋值给这个指针变量p, 意味着p的值就是变量b的地址。

指针变量:自己的值(指针变量本身的内容)是某个变量的地址

例1中的p就是指针变量

变量值:变量本身在内存中一定单元中bit组合的数据表示

变量值就是该变量本身的值例1中的b的变量值就是2,p的变量值就是(b的地址)

变量地址:即使指针(指针就是一个地址,地址就是指针)

例1中的p的值就是变量地址,  例1中:&b也是变量地址,&为取地址符号

在明白上面的每个概念后那么你的问题“传指针和传指针引用的区别/指针和引用的区别”就好回答了。

传指针:就是将例1中的p或者&b作为一个函数的实参发送给形参

传指针引用:就是把例1中的指针变量p(即使&p)的地址作为一个函数的实参。

注意上面的&p你会问这个什么意思? 你应该只是&为取地址运算符号。被&运算的对象必然是一个变量,那么你要明白一件事情我没在例1中写(&b )你应该明白把变量b的地址取出来,那么(&p)也是一样的道理,对没有错就是取出指针变量p的地址, 切记哦指针变量也是变量哦! 它和普通的变量没什么区别,只不过它是用来保存某个变量的地址罢了。你看例1中的int *p = &b  可不就是把一个普通的int类型的变量的地址赋值给p指针变量了么。

那么关键问题就是“ 传指针 传指针引用 的区别”

本质上没有区别,

还是在例1的基础上加上以下代码:

函数1:void fun1(int *p)这里写*p就是说这个形参值接受一个int类型变量的地址 { }函数2:void fun2(int **p) { int q = 3; }

下面我们用指针传递 调用这个fun1函数:

void fun1(&b); 调用后b的值变成了1

下面我们用指针引用传递 调用这个fun2函数:

void fun2(&p);这里写&p意味着被调用函数是应该是接受一个【指针变量】的地址的(即传指针引用)调用后p的值变成了某个变量的地址

好了总结一下:

指针传递:发送了一个变量的地址, 接受这个地址的函数可以利用这个地址找到这个变       量进行操作。

指针引用传递:发送了一个指针变量的地址, 接受这个指针变量地址的函数可以利用这个地址找到这个指针变量进行操作。

指针和引用的区别

指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?
首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。
“但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?”
char *pc = 0; 设置指针为空值
char& rc = *pc; 让引用指向空值
这是非常有害的,毫无疑问。结果将是不确定的(编译器能产生一些输出,导致任何事情都有可能发生)。应该躲开写出这样代码的人,除非他们同意改正错误。如果你担心这样的代码会出现在你的软件里,那么你最好完全避免使用引用,要不然就去让更优秀的程序员去做。我们以后将忽略一个引用指向空值的可能性。
因为引用肯定会指向一个对象,在C++里,引用应被初始化。
string& rs; 错误,引用必须被初始化
string s("zy");
string& rs = s; 正确,rs指向s
指针没有这样的限制。
string *ps; 未初始化的指针
合法但危险
不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。
void printDouble(const double& rd)
{
cout << rd; 不需要测试rd,它
} 肯定指向一个double值
相反,指针则应该总是被测试,防止其为空:
void printDouble(const double *pd)
{
if (pd) { 检查是否为NULL
cout << *pd;
}
}
指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变。
string s1("Nancy");
string s2("Clancy");
string& rs = s1; rs 引用 s1
string *ps = &s1; ps 指向 s1
rs = s2; rs 仍旧引用s1,
但是 s1的值现在是
"Clancy"
ps = &s2; ps 现在指向 s2;
s1 没有改变
总的来说,在以下情况下你应该使用指针,一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。
还有一种情况,就是当你重载某个操作符时,你应该使用引用。最普通的例子是操作符[]。这个操作符典型的用法是返回一个目标对象,其能被赋值。
vector<int> v(10); 建立整形向量(vector),大小为10;
向量是一个在标准C库中的一个模板(见条款M35)
v[5] = 10; 这个被赋值的目标对象就是操作符[]返回的值
如果操作符[]返回一个指针,那么后一个语句就得这样写:
*v[5] = 10;
但是这样会使得v看上去象是一个向量指针。因此你会选择让操作符返回一个引用。(这有一个有趣的例外,参见条款M30)
当你知道你必须指向一个对象并且不想改变其指向时,或者在重载操作符并为防止不必要的语义误解时,你不应该使用指针。而在除此之外的其他情况下,则应使用指针。

我晓得啦*炽措摄≡

1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
引用“从一而终” ^_^
4. 引用没有 const,指针有 const,const 的指针不可变;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为类成员名称时,其占用空间与指针相同4个字节(没找到标准的规定)。
7. 指针和引用的自增(++)运算意义不一样;

C语言指针自增自减运算

#include <stdio.h>
main()
{
int a[]={1,2,3,4,5};
int *p=NULL;
p=a;
printf("%d,",*p); p=a,取出1
printf("%d,",*(++p)); p=a+1,取出2
printf("%d,",*++p); p=a+2,取出3
printf("%d,",*(p--)); 先取出3,后p-1=a+1
printf("%d,",*p++); 先取出2,后p+1=a+2
printf("%d,",*p); 取出3
printf("%d,",++(*p)); 取出3,3+1=4
printf("%d,",*p); 确实是4,但不知原因
getch();
}
,*(++p)和*++p没有多大区别
我的验证
%d,P值
1,1245036
2,1245040
3,1245044
3,1245040
2,1245044
3,1245044
4,1245044
4,1245044
Press any key to continue

指针和引用的区别taotaoahui
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式