-
指针 引用
交换函数
查看全部 -
指针类型的引用
引用≈别名 结果输出20
查看全部 -
字符串指针和字符指针都是保存着第一个字符的内存地址
查看全部 -
为什么cout<<*str<<endl; 只显示H; 为什么不选择打印*str;而是str?
加上了*代表的是str的第一个元素 *str等价于 str[0] *str+1等价于str[1];所以打印的时候会打印出第一个字符H
需要打印全部只需要cout<<str<<endl;即可
查看全部 -
基本数据类型的引用
#include <iostream> using namespace std; int main(void) { int a=3; int &b=a;//引用必须初始化 b=10; cout<<a<<endl; return 0; }
结构体类型的引用
typedef struct { int x; int y; }Coor;
#include <iostream> using namespace std; int main(void) { Coor c1; Coor &c=c1; c.x=10; c.y=20; cout<<c1.x<<c1.y; return 0; }
指针类型的引用
类型 *&指针引用名=指针;
#include <iostaream> using namespace srd; int main(void) { int a=10; int *p=&a; int *&q=p; *q=20; cout<<a<<endl; return 0; }
引用作函数参数
void fun(int &a,int &b) { int c=0; c=a; a=b; b=c; } int x=10,y=20; fun(x,y);
查看全部 -
这个主要是形参与实参的关系 。
在函数的参数列表里的,是形参,它是对实参的一个拷贝, 但是它们不是在内在同一个块。所以对形参的改变不会影响实参的值 。
c++可以通过引用,也就是别名来改变, 比如把函数定义成 void fun(int x,int &y)
这样在函数里,对第二个参数做改变,相应的实参也会改变,因为它们是同一个。 这就是引用类型的作用。查看全部 -
C++内存管理
查看全部 -
有默认参数值的参数必须在参数表的最右端,也就是从右往左看不能先出现没有默认值的而后出现有默认值的。
声明时可加默认值,定义时建议不加,因为有些编译器通不过。
无实参时用默认值,否则实参覆盖默认值。
递归函数无法使用内联方式。
查看全部 -
指针指向const修饰的变量时,应该是const int const *p = &a;
const int const *p = &a这种写法可以运行,但是等价于const int *p = &a,也等价于int const *p = &a。从可读性角度,可删减一个const。三种const的作用都是把*p当作常量。
当const已经修饰一直变量时,再去用指针去指这个变量会很危险,因为指针可以改去该变量的值,与const就有冲突的风险,const int *p=&a和const int * const p=&a是可以的,这样保证了*p的值不能改变,所以就不会有与const冲突的可能性。
查看全部 -
p=&y后,*p为y的值,那么x会更新为5么?
p是指针,且不是const指针,也就是说你可以更改p的指向,让p指向其他int变量。
x和y是两个不相关的变量,一开始时p是指向x的。
p=&y; 这一语句你让p指向y这个变量,那么再*p得到就是y,与x完全没有关系了。
C++是一门强类型的语言,变量的所有行为都与它的类型有关。p的类型声明为 int const *p ,这里的const修饰的是前面的int,也就是说,p所指的对象是const int的,那么*p得到的对象的类型也被当作是const int的,所以才不能被修改。这与p到底指向什么无关,这样的行为只与p自己的类型有关。
“但可以通过改变p来改变*p” *p始终是不可修改的。你所见到的前后两个*p值不同,完全是因为p在前后分别指向了不同的对象x和y,x和y的值本就不同而已。
但是这里的改变 不是改变了原先*p指向的值 而是指向了其他的值 “但可以通过改变p来改变*p” *p始终是不可修改的。你所见到的前后两个*p值不同,完全是因为p在前后分别指向了不同的对象x和y,x和y的值本就不同而已。
查看全部 -
'int x = 3; const int *p = &x; ',作者说“p=&y正确,*p=4错误”
*p=3是固定的(只能通过改变x的值来改变,不能通过给*p赋值来改变)
,const int *y = &x;是指向的地址的内容不可变,即不可通过对*y赋值来修改x的值;但可以修改指向的地址。
int *const y = &x;才是y = &p;错误,而可以进行*y = 10;对x的值进行修改。
查看全部 -
从权限角度理解
查看全部 -
不是等价的,因为x是一个变量,而y虽然是x的别名,但是他表示的是一个常量;
因此,可以改变x的值,而不能通过对y的赋值语句改变他们的值;
至于意义,我想可能是为了对操作权限进行限制吧,对x的操作权限比对y的要大。
查看全部 -
int x=3;const int &y=x;此时的x和y还是等价的吗?若是不等价,那么该语句的意义何在?
查看全部 -
函数定义一般写在主函数后边。主函数前边可以声明,也可以不用声明
查看全部
举报