指针和引用的自增量(++)含义不同?
int b = & ampa;
int * p = & ampa;
b++;相当于a++;b只是A的另一个名字,它的用法和A一样..
p++;后面的p指向a后面的内存。
(* p)++;相当于a++
渔王游戏引用的自增(++)运算的含义不同吗?有什么不同?
炒金++象棋++卡牌游戏,剧情操作的意义不一样?不同的
传递指针和传递指针引用的区别/指针和引用的区别(指针:(一般理解为内存中变量的个数(地址))
例1:int b = 2;
int * p = & ampb;
上面的例子是把变量B在内存中的地址赋给这个指针变量P,也就是说P的值就是变量B的地址。
指针变量:它自己的值(指针变量本身的内容)就是一个变量的地址。
例1中的p是指针变量。
变量值:变量本身在内存中某个单位的位组合的数据表示。
变量值是变量本身的值。例1中,B的变量值为2,P的变量值为(B的地址)。
可变地址:甚至是指针(指针是地址,地址是指针)
例1中p的值是变量地址。例1:&;b也是变量地址。获取地址符号
理解了上面的每一个概念后,你的问题“传递指针和传递指针引用的区别/指针和引用的区别”就好回答了。
传递指针:即放P或&;b作为函数的参数发送给形参。
传递指针引用:即把例子1中的指针变量p(即使& amp;p)作为函数的参数。
注意以上&;警:这是什么意思?你应该&;取地址运算符号。Be &运算的对象必须是变量,所以你要明白一件事,是我在例1中没有写的(&;B)你要明白,如果你把变量B的地址拿出来,那么(&;p)也是如此。如果没有错,就把指针变量P的地址拿出来,记住指针变量也是变量!它和普通变量没什么区别,只是用来存储变量的地址。看例子中的int * p = & inb?它只是把一个普通的int变量的地址赋给一个p指针变量。
那么关键问题就是“传递指针和传递指针引用之间的区别”
本质上没有区别,
或者在示例1的基础上添加以下代码:
函数1: Voidfun 1 (int *p)这里写*p表示这个参数值接受一个int类型变量的地址{}函数2:void fun 2(int * * p){ int q = 3;}我们用指针传递来调用这个fun1函数:
void fun1。b);调用后,b的值变成1。让我们用指针引用传递来调用fun2函数:
void fun 2(& amp;p);写在这里&;p表示被调用的函数应该接受指针变量的地址(即传递指针引用)。调用之后,p的值就变成了一个变量的地址。我们总结一下:
指针传递:发送一个变量的地址,接受这个地址的函数可以用这个地址找到这个变量进行运算。
指针引用传递:发送一个指针变量的地址,接受指针变量地址的函数可以用这个地址找到要操作的指针变量。
指针和引用的区别指针看起来和引用完全不同(指针使用操作符“*”和“->”,引用使用操作符“.”),但它们的功能似乎是一样的。指针和引用允许您间接引用其他对象。如何决定何时使用指针,何时使用引用?
首先,要意识到在任何情况下都不能使用空值的引用。引用必须总是指向某个对象。所以如果你使用一个变量,并把它指向一个对象,但是这个变量在某些时候可能不指向任何对象,你应该把这个变量声明为指针,因为这样你就可以给这个变量赋一个null值。相反,如果变量明确指向一个对象,例如,您的设计不允许变量为空,那么您可以将变量声明为引用。
“但是,请等一下,”你疑惑地问。“这样的代码会怎么样?”
char * PC = 0;将指针设置为空。
char & amprc = * pc让引用指向一个空值
这是非常有害的,毫无疑问。结果将是不确定的(编译器可以产生一些输出,因此任何事情都可能发生)。应该避免写这种代码的人,除非他们同意改正他们的错误。如果你担心这样的代码会出现在你的软件中,那么你最好完全避免使用引用,或者让更好的程序员来做。我们将忽略引用将来指向空值的可能性。
因为引用肯定会指向一个对象,所以在C++中,引用应该被初始化。
弦与弦。RS;错误,必须初始化引用。
字符串s(" zy ");
弦与弦。RS = s;正确,rs指向s。
指针没有这样的限制。
string * ps未初始化的指针
合法但危险
没有对空值的引用这一事实意味着使用引用的代码比使用指针的代码更有效。因为在使用引用之前不需要测试它的有效性。
void printDouble(常量double & amp研发)
{
cout & lt& ltrd;没有必要测试研发,它
}必须指向双精度值。
相反,应该始终测试指针以防止它们为空:
void printDouble(常数double *pd)
{
if(PD){检查是否为空。
cout & lt& lt* pd
}
}
指针和引用的另一个重要区别是指针可以被重新分配以指向不同的对象。但是,引用总是指向初始化时指定的对象,并且以后不能更改。
字符串s 1(" Nancy ");
字符串S2(“Clancy”);
弦与弦。RS = s 1;Rs参考s1
string * ps = & amps 1;Ps指向s1。
rs = s2Rs还是指s1,
但是s1的值是现在。
《克兰西》
ps = & ampS2;Ps现在指向S2;
S1没有变。
一般来说,你应该在以下几种情况下使用指针:第一,你考虑不指向任何对象的可能性(这种情况下,你可以将指针设置为空);其次,你需要能够在不同的时间指向不同的对象(在这种情况下,你可以改变指针的方向)。如果你总是指向一个对象,一旦你指向一个对象,你就不会改变这个点,那么你应该使用一个引用。
另一种情况是,当重载一个运算符时,应该使用引用。最常见的例子是运算符[]。该运算符的典型用途是返回一个可以赋值的目标对象。
向量& ltint & gtv(10);建立一个大小为10的整形向量;
向量是标准C库中的一个模板(见第M35条)。
v[5]= 10;分配的目标对象是运算符[]返回的值
如果操作符[]返回一个指针,那么后面的语句必须写成这样:
* v[5]= 10;
但是这会让v看起来像一个向量指针。所以你会选择让操作符返回一个引用。(有一个有趣的例外,见第M30条)
当你知道你必须指向一个对象并且不想改变它的指向时,或者当重载操作符以防止不必要的语义误解时,你不应该使用指针。在其他情况下,应该使用指针。
我知道*池措照片≡。
1.指针是实体,引用只是个体名称;
2.使用引用时不需要解引用(*),但指针需要解引用;
3.一个引用在定义的时候只能初始化一次,然后就不可变了;指针是可变的;
引用“从一个到最后一个”
4.引用没有const,指针有const,const的指针不可变;
5.引用不能为空,指针可以为空;
6.“sizeof reference”获取被指向变量(对象)的大小,“Sizeof pointer”获取指针本身的大小(被指向变量或对象的地址);
typeid(T)= = typeid(T & amp;)常数为真,sizeof(t)= = sizeof(t & amp;)始终为真,但引用作为类成员名使用时,占用了与指针相同的4字节空间(找不到标准规定)。
7.指针和引用有不同意义的自增(++)操作;
c语言指针自增自减操作# include < stdio.h & gt
主()
{
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
按任意键继续
指针和引用的区别