惧留孙网

juliusun.com

在线教程 > C语言教程 > 指针基础

指针基础

第 23/50 节 冥河C语言教程


除了通过变量名访问变量,指针也可以。以下以32位计算机为例。我们定义的变量、函数等都存储在计算机内存中,内存中每个字节都有唯一的一个编号,我们称编号为地址。

不同的变量名就存放在不同的地址中。指针类型就是用来记录在内存中的地址。因为只要我们找到了变量的地址,并用指针变量来记录它,那么我们就可以通过指针来改变内存,而达到改变变量的目的。

指针类型存储的内容是内存地址,如果把指针类型叫做地址类型,大概也可以。不过指针类型可以好听一点,且如果是地址类型,可能不容易突出类型之分,所以叫指针类型。

与指针操作相关的常用运算符,只有两个,一个是星号*,一个是取地址符&。星号*用来定义和引用指针,取地址符&用来获取变量地址。下面详细讲解。

指针类型和普通变量一样,通常是定义、赋值、引用。指针有类型之分,不同类型指针,指向的类型不如,如int类型指针指向的内容是int类型变量、char型指针指向的是char类型变量。指针定义语法如下:

类型名 * 指针变量名

相比普通基本类型变量,指针变量定义时需要在指针变量名前加个星号*代表指针类型。例:


  1. int * pi; //定义指针类型变量pi,指向的内容为int类型
  2. float * pf; //定义指针类型变量pf,指向的内容为float类型
  3. char * pc; //定义指针类型变量pc,指向的内容为char类型。注:通常指向字符串也用类方法,不必细究

指针类型赋值,需要的赋值变量的地址。获取变量的地址,用取地址运算符&加在变量前。如获取变量i的地址,用&i来表示。赋值通常格式如下:

指针变量名 = &变量名

注意:变量名要与指针指向的类型相同,否则要强制转换。例:


  1. int i;
  2. char c;
  3. int * pi; //此句也可与i一起定义写作int i,*pi;或int *pi,i;
  4. char * pc; //pc同样可以和c定义在一起
  5. pi = &i; //将i的地址赋值给pi,也就是让pi指向i
  6. pc = &c; //将c的地址赋值给pc,也就是让pc指向c

同普通变量赋值一样,指针可以在定义同时赋值,上述代码可以写成:


  1. int i, *pi=&i; //此句也可与i一起定义写作int i,*pi;或int *pi,i;
  2. char c, *pc=&c; //多数编译器运算符是可以和类型或是变量名写在一起,不用空格作分隔符的

访问指针指向的内容用星号加指针变量名:

*指针变量名

如要将指针内容重新赋值,可以写*p = 1;,要将指针指向内容赋值给其它变量,可以写类似i = *p;,例


  1. int i, *pi=&i, j;
  2. char c, *pc=&c;
  3. *pi = 0; //将pi指向的内存内容重新赋值成0,执行完成后变量i的值同样变成0
  4. *pc = 'a'; //执行后变量c的值变为字符'a'
  5. j = *pi + 1; //引用pi指向的值,加上1结果赋值给变量j,执行后j值为
  6. printf("%c %c",*pc,c); //会输出"a a"。pc指向char类型,输出pc指向内容用%c格式控制符号

注意:关于指针的星号运算符在定义和引用时使用。定义时用星号表示变量是指针,引用时用星号表示取指针指向的内容。取地址符&只用在取变量地址上。

指针指向变量后,可以通过指针操作变量了。修改指针指向的内容,对样对指向的变量也会生效。

通过指针可以操作变量,通过变量名也可以。但是不要认为指针是可有可无的,在以后的学习中会发现,指针的作用不是变量名能替代的。

下一节再深入一点了解指针。

作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的