你害怕指针吗?
一、指针?啥玩意?
指针嘛?这玩意,还真挺难!每次编程序遇到指针时……

1.指针的基本概念
(1)概念
指针,是C语言的一种派生类型,指针变量存储的值是某**内存地址
(2)作用
①使用指针可以更加灵活地组织具有复杂关系的数据,简化操作过程,提高程序的运行效率。
①可以通过其存储地址间接存取变量中的数据
2.指针变量的定义
【语法格式】:类型标识符 * 标识符
例如:
int *p;
3.指针变量的赋值
(1)指针变量如何赋值?
通过地址符 &
int *p;//定义指针变量
p=&a; //把变量 a 的地址赋给指针变量 p,表示指针 p 指向变量 a
(2)指针变量如何初始化?
float a,*p=&a;
或者
float a;
float *p=&a; //指针 p 与变量 a 的类型必须一致
(3)通过其他指针变量赋值
int i;
int *p1=&i,*p2;
p2=p1;
(4)给指针变量赋空值
p=NULL;
//当指针被赋值为NULL时,指针不指向任何数据。
4.开辟动态存储单元
(1)new运算符
【语法格式】new 类型名;
【语法格式】new 类型名[元素个数];
(2)delete运算符
【语法格式】delete 变量名;
【语法格式】delete []变量名;
(3)实例
int i=7,*p;
double *q;
p=new int[i+3]; //在内存中分配10个int类型的连续存储单元块
q=new double; //在内存中分配一个double类型存储单元块
……
delete q; //释放double单元块
delete []p; //释放10个int类型连续存储单元块
5.指针运算符
(1)给p赋初值
int i=123,j,*p;
p=&i;
(2)怎么通过指针取 i 的值,将其赋给 j ?
j=*p; //指针间接赋值,*p等价于变量i
j=*&i; //直接赋值,*&i等价于变量i
// * 和 & 都是单目运算符,具有相同的优先级,结合方向自右向左
(3)再来一块代码
p=&i;
printf("%d\n",*p);
j=(*p)++; //括号不能省略
// * 和 ++ 均为单目运算符,结合方向自右向左,因此*p++ <=> *(p++)
(4)指针变量的值可以改变
int i=1,j=2,*p;
p=&i;
*p+=100;
p=&j;
(*p)--;
// *p 方式存取变量值是间接的,比直接存取一个变量更加费时。
通过改变指针的指向,增加程序设计的灵活性,使代码更加简洁、高效。
(5)等价语句
*p <=> i <=> *&i
&*p <=> &i <=> p
(6)实例
int *p;
p=new int; //开辟一块动态存储区,把其首地址赋值给p
*p=789;
//指针运算符“ * ”是单目运算符,乘法运算符“ * ” 是双目运算符
(未完待续……)
本文深入讲解C语言中的指针概念,包括指针的基本定义、作用、变量定义与赋值、动态存储单元的开辟与管理、指针运算符的使用及实例演示。适合初学者和进阶者理解并掌握指针的运用。
2261

被折叠的 条评论
为什么被折叠?



