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

2020-01-06 14:15:45王振洲

请你务必先记住这两点,相信你一定不会再被它们给搞糊了。现在再看这两个声明语句int const *pi和int *const pi时,呵呵,你会头昏脑胀还是很轻松惬意?它们各自声明的pi分别能修改什么,不能修改什么?再思考下这些问题。

补充三种情况

这里,我再补充以下三种情况。其实只要上面的语义搞清楚了,这三种情况也就已经被包含了。不过作为三种具体的形式,我还是简单提一下吧。

情况一:int *pi指针指向const int i常量的情况


#include "stdio.h"

main()
{
  /* begin */
  const int i1 = 40;
  int *pi;
  pi = &i1; /* 这样可以吗?不行,VC下是编译错。*/
  /* const int 类型的i1的地址是不能赋值给指向int 类型地址的指针pi的。否则pi岂不是能修改i1的值了吗!*/
  pi = (int *) &i1; /* 这样可以吗?强制类型转换可是C所支持的。*/
  /* VC下编译通过,但是仍不能通过 *pi = 80来修改i1的值。去试试吧!看看具体的怎样。*/
  /* end */
}

情况二:const int *pi指针指向const int i1的情况


#include "stdio.h"

main()
{
  /* begin */
  const int i1=40;
  const int * pi;
  pi=&i1;/* 两个类型相同,可以这样赋值。很显然,i1的值无论是通过pi还是i1都不能修改的。 */
  /* end */
}

情况三:用const int *const pi声明的指针


#include "stdio.h"

main()
{
  /* begin */
  int i;
  const int * const pi=&i; /*你能想象pi能够作什么操作吗?pi值不能改,也不能通过pi修改i的值。因为不管是*pi还是pi都是const的。 */
  /* end */
}


注:相关教程知识阅读请移步到C++教程频道。