C语言---09指针-07指针常量与常量指针

C语言---09指针-07指针常量与常量指针,第1张

一、const关键字
  • const修饰变量为只读,不能赋值

  • const修饰的变量尽量初始化

  • 知道该变量的地址也可以间接修改它的值,但是不提倡这样做

const int num = 10;
printf("num = %d\n",num); // 10

printf("&num = %p\n", &num); // &num的类型为const int *
*(int *)(&num) = 1000; // 强转为int *,可修改
printf("num = %d\n",num); // 100

二、指针常量 int * const p
  • const在*的右边,表示const修饰的是p,而不是*

  • 功能:不可改变其指向,但是可以改变其指向地址中的值(*p可读可写 p只读)

  • 指针常量必须初始化赋值,否则没有意义

  • 不想要在程序运行过程中改变指针的指向,则可以使用指针常量

void fun1()
{
	int a = 10, b = 20;
	int * const p = &a; // 指针常量 p只能指向a
	printf("*p=%d\n", *p); // 10
	*p = 100; 
	printf("a=%d\n", a); // 100 
	// p = &b; 不能改变指针常量的指向,会报错
	printf("*p=%d\n", *p); // 100	
}

三、常量指针 const int *p
  • const在*的左边,表示const修饰的是*,而不是 p

  • 功能:指向的地址中的值不可由指针改变,可以改变指针的指向(*p 只读 p可读可写)

  • 由于指针被认为指向的是一个常量,所以不可改变值

void fun2()
{
	int a = 10, b = 20;
	const int *p = &a; // 常量指针 a的值不能改变
	printf("*p=%d\n", *p);
	// *p = 100;	
	p = &b; // 可以改变常量指针的指向
	printf("*p=%d\n", *p);
}

四、指向常量的指针常量 const int * const p
  • 用于只读指针(常量指针常量)不可改变指向,也不可改变指针所指向地址中的值

void fun3(const int * const p)
{
	int x = 123;
	printf("%d\n", *p);
	// p = &x; 形参指针常量无法改变指向
	// (*p)++;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/3002877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存