c++入门
原创
©著作权归作者所有:来自51CTO博客作者蓝枫居士的原创作品,请联系作者获取转载授权,否则将追究法律责任
在c++ 中有两种方式
Person p1(12);
Person *p2=new Person(12);
p1在方法结束后,就会消亡
p2在方法结束后,不会消亡,得手动删除
对p2的方法调用可以 p2->run();或者 (*p2).run();
string a="abc";
bar(a); //ok
将数组交给指针
int a[5];
int *p = &a[0];
int *k = a;
二维数数组
int b[3][4];
int *p;
p=b[0];
c++函数中的变与不变
Person里面有个方法叫add,参数是Person p,那么对p的所有修改,不会影响真实的外部调用 这叫使用对象做函数参数(但是如果p很大的话,这种方式比较耗费资源)
Person里面有个方法叫add,参数是Person *p,那么对p的所有修改,会影响真实的外部调用 这叫使用指针做函数参数
Person里面有个方法叫add,参数是Person &p,那么对p的所有修改,会影响真实的外部调用 这叫使用引用做函数参数
如果又不想让p的修改影响外部,而且效率高,就把参数声明改成 const Person &p
这时 下面的代码都是错误的
//使用对象做函数参数就不会影响外面的实参,所以meth1加const是没有什么意义的#
void meth1(const Person p) {
Person k;
p.year = 15; //错误
p = k; //错误
}
void meth2(const Person &p) {
Person k;
p.year = 15; //错误
p = k; //错误
}
void meth3(const Person *p) {
Person k(2,2);
p = k; //错误
p.year = 12;//错误
}
同时
const int a=10;
const int &b=a;
int &c=a; //不行 非常量指向一个常量是不行的
int i=42;
const int &b=i; //ok
int a = 10;
const int &b = a;
cout << b << endl;
a = 15;
cout << b << endl;
关于 引用与指针的初始化与使用
int k = 4158;
int k2 = 12;
int &p = k;
const int &m = 1234;
//int &m = 123; //引用的初始值必须是对象
p = k2;
&p = k2; //不行
&p = 123; //不行
int k = 12;
int s = 333;
int *m = &k;
int *h = 1234;//不行
int *h2 = k;//不行
int p = 11;
*m = p;
m = &s;
m = s;//不行
m = 123;//不行