C语言的const与static

const

const在C语言中,修饰的是变量,表示只读。因为是变量就可以通过其他的方式修改。
(1) const在修饰int型的数据时,const int a;
如:

const int a = 10;
int *p = &a;
*p = 20;
printf ("%d\n", a);

就会出现如下结果:

20

(2) 同理,const修饰指针,const int *p;

int a = 10;
const int *p = &a;
// *p = 20; 这是错误的,*p不能操作。
a = 20; // 这就是正确的
printf ("%d\n", *p);

int *q = &a;
*q = 30;
p = q;
printf ("%d\n", *p); // 这里其实是修改了p的值

关于long、double、float等类型同int。
但是,const修饰全局的时候,就不能更改,否则会报错。

#include <stdio.h>
const int a = 10;
int main()
{
  int *p = &a;
  *p = 20;
  return 0;
}

这个程序执行后,会报错,原因是a是全局变量,会被分配至静态区。
(3)const修饰地址, int *const p;

int a = 10;
int *const p = &a;
int *q = &a;
*q = 20;
// p = q;这是错的,这里const修饰的是p,则p的值不能直接赋值
*p = 20; // 这是可以的
printf ("%d\n", a);

(4) const连续修饰, const int *const p;

int a = 10;
const int *const p = &a;
// *p = 10; 错误
int *q = &a;
*q = 20;
// p = q; 错误

第4种的情况比较特殊,但是可以使用二重指针进行修改,这里就不介绍了。

const 修饰的是函数

1、修饰的是函数里的形参,表示不可被修改;

int add(const int a, const int b)
{
   return a + b;
}

2、修饰的是函数返回值

const int add(int a, int b)
{
	return a + b;
}

这里是没有意义的,因为返回的是临时变量,函数执行之后,就会被释放。
3、修饰的返回值是指针类型

const int * add(int a, int b)
{
   int *p = a + b;
   return p;
}

这里的返回指针指向的内容,不可被改变

static

static 可以修饰的有三种,函数、全局变量、局部变量
(1) static 修饰局部变量,表示该变量在函数执行完之后,不释放;

#include <stdio.h>

int add1();
int add2();
int main()
{
	int i = 0;
	int num1 = 0;
	int num2 = 0;
	for (i = 0; i < 10; i++)
	{
	    num1 = add1();
	    num2 = add2();
	}
	printf ("num1 = %d, num2 = %d\n", num1, num2);
    return 0;
}
int add1()
{
   int a = 10;
   a++;
   return a;
}
int add2()
{
    static int b = 10;
    b++;
    return b;
}

在这里插入图片描述
(2) 修饰全局变量时,外部函数无法调用该变量,即该变量被隐藏了,可以不用担心命名冲突;
(3) 在修饰函数时,被修饰的函数,只能在被文件中使用;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值