指针(*)、取地址(&)、解引用(*)与引用(&) |
您所在的位置:网站首页 › C语言中的地址传递 › 指针(*)、取地址(&)、解引用(*)与引用(&) |
指针(*)、取地址(&)、解引用(*)与引用(&)
C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。 指针是一个包含了另一个变量地址的变量,您可以把一个包含了另一个变量地址的变量说成是"指向"另一个变量。变量可以是任意的数据类型,包括对象、结构或者指针。 指针与取地址例程: int main() { int num = 3; int* p = # // 将变量num的地址取出来,存到指针p中 printf("%d 的地址是 %p\n", num, p); return 0; }输出 3 的地址是 0x7ffeefbff3ac上面int* p定义了一个指针p,这个指针指向的地址所存放的变量的数据类型是int,在本例程中,即是指向int型变量num,而p的值即是变量num的地址。 而&num中的&是取地址操作符,当&作用于一个对象上时,它返回了该对象的地址,比如例程中的&num即是为变量num的地址。 解引用与指针赋值例程 int main(){ int num = 7; int* p = # printf("数值%d所在的地址是 %p\n", num, p); printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, *p); *p = 100; printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, num); return 0; }输出: 数值7所在的地址是 0x7ffeefbff3b8 指针p所指向的地址为 0x7ffeefbff3b8 , 该地址上所保存的值为7 指针p所指向的地址为 0x7ffeefbff3b8 , 该地址上所保存的值为100注意这里*操作符为解引用操作符,它返回指针p所指的对象的值(注意不是地址)。 我们可以对*p赋值(对左值赋值),从而改变p所指的地址上所保存的值,从而改变此地址所存储的变量num的值。(上面num的值变为100) 当然,我们也可以给指针p赋值,使其指向另外一个地址(这样就改变了在解引用时获取的左值): int main(void) { int num = 7, another = -5; int *p = # p = &another; printf("%d\n", *p);//此时p指向了another,所以输出了another的值,即-5 return 0; }输出 -5 引用最通俗的解释:引用就是起别名。 引用在C中没有,在C++中才有。 int main() { int val = 7, val2 = 999; int &refval = val, &refval2 = val2; //引用必须要初始化,使其绑定到一个变量上 //修改引用的值将改变其所绑定的变量的值 refval = -12; printf("%d %d\n", val, refval);//-12,refval的值和val一样 //将引用b赋值给引用a将改变引用a所绑定的变量的值, //引用一但初始化(绑定),将始终绑定到同一个特定对象上,无法绑定到另一个对象上 refval = refval2; printf("%d %d\n", val, refval);//999 return 0; }输出 -12 -12 999 999 总结*操作符: 定义一个指针 int* p;将一个指针(地址)解引用得到改地址所存的值 cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |