讲解C语言编程中指针赋值的入门实例

2020-01-06 14:15:45王振洲
易采站长站为您分析讲解C语言编程中指针赋值的入门实例,通过const int i与int *const pi这样两个例子来分析指针的赋值和地址指向,需要的朋友可以参考下  

从const int i 说起

你知道我们声明一个变量时象这样int i ;这个i是可能在它处重新变赋值的。如下:


int i = 0;
/* . . . */
i = 20; /*这里重新赋值了*/

不过有一天我的程序可能需要这样一个变量(暂且称它变量),在声明时就赋一个初始值。之后我的程序在其它任何处都不会再去重新对它赋值。那我又应该怎么办呢?用const 。


/* . . . */
const int ic =20;
/* . . . */
ic = 40; /*这样是不可以的,编译时是无法通过,因为我们不能对const 修饰的ic重新赋值的。*/
/*这样我们的程序就会更早更容易发现问题了。*/
/* . . . */

有了const修饰的ic 我们不称它为变量,而称符号常量,代表着20这个数。这就是const 的作用。ic是不能在它处重新赋新值了。

认识了const 作用之后,另外,我们还要知道格式的写法。有两种:


const int ic = 20;


int const ic = 20;

它们是完全相同的。这一点我们是要清楚。总之,务必要记住const 与int哪个写前都不影响语义。有了这个概念后,我们来看这两个家伙:


const int *pi


int const *pi

按普通的逻辑看,它们的语义有不同吗?呵呵,只要记住一点:int 与const 哪个放前哪个放后都是一样的,就好比const int ic;与int const ic;一样。也就是说,它们是相同的。

好了,我们现在已经搞定一个“双包胎”的问题。那么


int *const pi;

与前两个语句又有什么不同呢?下面就来具体分析它们的格式与语义吧。
先来说说const int *pi是什么作用 (当然int const *pi也是一样的,前面我们说过,它们实际是一样的)。看下面的例子:


#include "stdio.h"

main()
{
  /* 代码开始 */
  int i1 = 30;
  int i2 = 40;
  /* 现在 pi 变量的内容为 i1 的内存地址 */
  const int *pi = &i1;
  /* 注意这里,pi可以在任意时候重新赋值一个新内存地址*/
  /* pi 变量的内容为 i2 的内存地址 */
  pi = &i2;
  /* 想想看:这里能用*pi = 80来代替吗?当然不能!*/
  i2 = 80;
  printf("%dn", *pi); /* 输出是80 */
  /* 代码结束 */
}