关于const
- C语言中的const修饰的变量为只读变量(只读的是这个变量,不是内容,意味着内容可修改)
无法通过变量修改内容,但是可以通过指针变量修改
#include <stdio.h>
int main(int argc, char *argv[])
{
const int num = 10;
//c语言中使用const修饰变量为只读变量
//此时无法通过变量名修改其值
//num = 11;
//但是可以通过指针变量修改值
int *p = #
*p = 11; //赋给*p值后,num的值也发生变化,这算是一个C语言中的漏洞,所以在C++中进行了改进.
printf("%d\n",num);
return 0;
}
- C++中的const修饰变量,如果以常量初始化该变量,不会立即开辟空间,而是生产符号常量表,对其取地址会开辟新的地址.
代码示例:C++
#include <iostream>
#include <string>
using namespace std;
int main()
{
const int num =23;
//这叫常量初始化,除此以外所有初始化都不会开辟新空间,结果为*p!=num
//int a = 10;
//const int num = a;
//这叫变量初始化,会为num开辟新空间,结果永远是*p==num
int *p=(int *)#
*p=12;
cout<<num<<endl;
//虽然之前已经给*p赋值,但是num的值没有发生变化,因为*p重新开辟了空间.
cout<<*p<<endl;
return 0;
}
关于引用&
引用实际上是对同一片内存空间取别名,
1.必须在声明引用变量时进行初始化。
2.不能有 NULL 引用。必须确保引用是和一块合法的存储单元关联。
3.引用前没有数据类型时为取地址
4.引用作为返回值时,确保当函数中执行完毕后,引用关联的内存一定要存在
#include <iostream>
#include <string>
using namespace std;
int add(int a,int b)
{
return a+b;
}
int& test05() //引用作为返回值
{
static int x = 10;
int& p = x;
return p;
}
int main()
{
int num =23;
int we=11;
int &p=num; // (1)一旦初始化,p将 一直是num的引用,不会改变.而且,必须初始化
p=we; //p依然是num的引用,这里只是改变p和num的值,并没有改变引用的指向.
we=44; //we改变为44,p和num依然是11
int str[12]={1,2,3,4,5};
int (&str1)[12]=str; //引用数组
cout<<str1[1]<<endl;
int (&add1)(int a,int b)=add; //引用函数
cout<<add1(1,2)<<endl;
int *p=&we;
int *&q=p; //对指针变量的引用模拟/
cout<<num<<endl;//输出为11
cout<<p<<endl; //输出为11
return 0;
}