C语言 day14 | 我的日常分享

C语言 day14

const 关键字

1.const 修饰变量为只读

案例 1:

1
2
3
4
5
6
//const 修饰num为只读变量 num只能取值 不能借助num进行写操作
const int num=10;
printf("num=%d\n",num);

num=100;//报错 [Error] assignment of read-only variable 'num'

案例 2:

  • 可以通过 num 的地址间接地修改 num 的值,但是地址要强制类型转换.少干,知道可以这样做就行了
1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
int main(int argc,char *argv[]){
const int num=10;
printf("num=%d\n",num);

//num=100;//报错

//*&num=100;// 报错 &num 为const int *
*(int *)(&num)=100;
printf("num=%d\n",num);
return 0;
}

运行结果:
图片

const int *p

  • const*左边 表示const修饰的是*而不是p

  • 效果:用户不能借助*p更改空间的内容,但是p可以指向其他空间(*p只读 p可读可写)

案例3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
int main(int argc,char *argv[]){
int num1=10;
int num2=20;
const int *p = &num1;

printf("*p=%d\n",*p);
p=&num2;
//*p=100;报错
num2=100; //不能借助*p取修改空间内容 但是变量本身是可以修改的
printf("*p=%d\n",*p);

return 0;
}

运行结果:
图片

> char *strcpy(char *dest,const char *src)

const char *src的意思就是告诉用户,这个函数不会通过*src取修改变量的值

int * const p

  • const*的右边修饰p,而不是*
  • 效果:用户可以借助*p更改空间的内容,但是p不能指向其他空间(*p可读可写 p只读)

案例4

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main(int argc,char *argv[]){
int num1=10;
int num2=20;
int * const p = &num1;
*p=100;
printf("*p=%d\n",*p);
//p=&num2;//报错

return 0;
}

运行结果:
图片

const int * const p

  • 效果:用户不能借助*p更改空间的内容,p也不能指向其他空间(*p只读 p只读)