1 – C语言中的const用法
(1)在C语言construction修饰一个全局变量,无论如何都无法修改变量的值
(2)在C语言中如果const修饰一个局部变量,则只能通过指针变量来改变其值
(3)如果const修饰指针变量的类型,则不能通过指针变量修改保存的地址里面的内容
(4)如果const修饰指针变量,则不能修改指针变量保存的地址
(5)如果既修饰指针变量的类型又修饰指针变量,则只能通过原本的变量修改内容,无法通过指针变量修改
#include <stdio.h>
//在C语言construction修饰一个全局变量,无论如何都无法修改变量的值
const int a = 100;
void test1()
{
printf("a = %d\n", a);
//a = 200;
//printf("a = %d\n", a);
//int *p = &a;
//*p = 200;
//printf("a = %d\n", a);
}
void test2()
{
//在C语言中如果const修饰一个局部变量,则只能通过指针变量来改变其值
const int b = 200;
printf("b = %d\n", b);
//b = 666;
//printf("b = %d\n", b);
int *p = &b;
*p = 888;
printf("b = %d\n", b);
}
void test3()
{
int c = 100;
//int *p = &c;
//如果const修饰指针变量的类型,则不能通过指针变量修改保存的地址里面的内容
//const int *p = &c;
//如果const修饰指针变量,则不能修改指针变量保存的地址
//int *const p = &c;
//如果既修饰指针变量的类型又修饰指针变量,则只能通过原本的变量修改内容,无法通过指针变量修改
const int * const p = &c;
printf("*p = %d\n", *p);
//想要修改p指针里面保存的地址里面的内容,如何修改
//方法1:直接通过c变量修改
c = 666;
printf("*p = %d\n", *p);
//方法2:直接通过*p修改
*p = 777;
printf("*p = %d\n", *p);
//方法3:直接修改p保存的地址
int d = 888;
p = &d;
printf("*p = %d\n", *p);
}
int main(int argc, char *argv[])
{
test3();
return 0;
}
2 – C++语言中的const用法
#include <iostream>
using namespace std;
//C++中的const使用方法与C语言基本类似
//对全局变量和指针变量修饰是一模一样的,但是对局部变量的操作有区别
void test1()
{
//const如果修饰一个局部变量,局部变量保存值
//操作系统会认为当前变量是不会被改变的,所以会将当前变量和值保存在符号常量表中
//保存在符号常量表中之后,下次使用当前变量时,不会从原本变量的地址中取值,而是
//从符号常量表中取值,所以即使改变原本的地址的内容,使用变量时发现值还是没改
//const int a = 100;
//使用volatile修饰变量,表示当前变量时易变的,所以不会保存在符号常量表中
const volatile int a = 100;
cout << "a = " << a << endl;
// a = 666;
// cout << "a = " << a << endl;
//C++对类型严格要求,需要保证左右值类型必须一样
int *p = (int *)&a;
*p = 666;
cout << "&a = " << &a << endl;
cout << "p = " << p << endl;
cout << "*p = " << *p << endl;
cout << "a = " << a << endl;
}
void test2()
{
int m = 100;
//如果const修饰的变量保存的是一个变量,则不会讲变量保存在符号常量表中
const int a = m;
int *p = (int *)&a;
*p = 666;
cout << "*p = " << *p << endl;
cout << "a = " << a << endl;
}
struct stu{
int a;
int b;
char c;
};
void test3()
{
//如果const修饰的变量的类型是构造数据类型,则也不会保存在符号常量表中
const stu s1 = {100, 200, 'w'};
stu *p = (stu *)&s1;
p->a = 666;
p->b = 777;
p->c = 'q';
cout << s1.a << " " << s1.b << " " << s1.c << endl;
}
int main(int argc, char *argv[])
{
test3();
return 0;
}