C语言——指针进阶

本文深入探讨C语言中的指针进阶概念,包括指针与常量的关系、指针与数组的交互、指针数组与数组指针的区别、多维数组与指针的联系,以及指针在函数中的应用。重点讲解了const修饰符在不同情况下的作用,以及如何正确理解和使用指向常量的指针、常量指针、指向常量的常量指针等。同时,文章通过实例说明了指针与一维、二维数组的关系,以及指针函数和函数指针的用法。
摘要由CSDN通过智能技术生成

概括图:

一.指针进阶。

 

A.指针与常量。(重点const作用于哪个域)

1.指向常量的指针(指针常量):这种指针自身值不能被修改,但指针可以修改指向。

例:

#include <stdio.h>

int main()
{
	int num = 123;
	int const cnum = 111;	//只读变量
	int const *p = &cnum;	//指向只读变量的只读指针
	
	printf("cnum: %d, &cnum: %p\n", cnum, &cnum);
	printf("*p: %d, p: %p\n", *p, p);
	
	*p = 1235;	//自身值无法改变,这句无法通过。
	
	p = num;		//指向可以改变,这句可以通过。
	printf("cnum: %d, &cnum: %p\n", cnum, &cnum);
	printf("*p: %d, p: %p\n", *p, p);
	
	num = 110;	//这样就改变了p的值。
	printf("cnum: %d, &cnum: %p\n", num, &num);
	printf("*p: %d, p: %p\n", *p, p);
	
	return 0;
}

 

 

 

#注意:

建议const写在后面:

A. const所修饰的类型是正好在它前面的那一个。
B. 我们很多时候会用到typedef的类型别名定义。比如typedef char* pchar,如果用const来修饰的话,当const在前面的时候,就是const pchar,你会以为它就是const char* ,但是你错了,它的真实含义是char* const。是不是让你大吃一惊!但如果你采用const在后面的写法,意义就怎么也不会变,不信你试试!

 

2.指向非常量的常量指针(常量指针):这种自身值可以修改,但指向不能被修改。

例:int *const p = &num;    //const在星号左边是指向常量的指针,修饰*自身值无法改变指向可以改变、放在右边就是常量指针,修饰p自身值可以改变指向不能改变。

例:

#include <stdio.h>

int main()
{
	int num = 123;
	int const cnum = 111;	//只读变量
	int * const p = &cnum;	//常量指针
	
	*p = 1024;	//自身值可以改变
	printf("*p: %d\n", *p);
	
	num = 110;	//改变了p指向的数据的值。
	printf("*p: %d, num = %d\n", *p, num);
	
	p = &cnum; //指向不能改变,这句无法通过。
	
	return 0;
}

 

3.指向常量的常量指针:指针自身值不能被修改,同时指针指向也不能被修改。

例:

#include <stdio.h>

int main()
{
	int num = 123;
	int const cnum = 111;	//只读变量
	int const * const p = &cnum;	//指向常量的常量指针。
	
	*p = 1024;	//自身值不改变,这句无法通过。	
	p = &cnum; //指向不能改变,这句无法通过。
	
	return 0;
}

 

 

 

4.指向"指向常量的常量指针"的指针:int const * const *pp = &p;

例:

 

#include <stdio.h>

int main()
{
	int num = 123;
	int const cnum = 111;	//只读变量
	int const * const p = &num;	//指向常量的常量指针
	int const * 
  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值