指针系统学习8-小结

1.有关指针的数据类型的小结

2.指针运算小结

一、指针变量加(减)一个整数,会指向上(下)1(i)个元素
  例如:p++、p--、p+i、p-i、p+=i、p-=i等。

二、 指针变量赋值
  将一个变量地址赋给一个指针变量。如:
  p=&a;  (将变量a的地址赋给p)
  p=array; (将数组array首元素地址赋给p)
  p=&array[i];(将数组array第i个元素的地址赋给p)
  p=max;(max为已定义的函数,将 max 的入口地址赋给p)
  p1=p2;(p1和p2都是指针变量,将 p2 的值赋给p1)

三、指针变量可以有空值,即该指针变量不指向任何变量,可以这样表示:p = NULL;注意NULL为宏定义,其值为0. 

四、两个指针变量可以相减:如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数

五、两个指针变量比较:若两个指针指向同一个数组的元素,则可以进行比较,比较的是在数组中的序数。指向前面的元素的指针变量“小于”指向后面元素的指针变量。

3.关于 void类型

  void真正发挥的作用在于:

  1. 对函数返回的限定;
  2. 对函数参数的限定。

  例如:void abc( void );

1.void指针

  ANSI C新标准增加了一种“void”指针类型,即不指定它是指向哪一种类型数据的指针变量。

   例如:void *p;   表示指针变量p不指向一个确定的类型数据,它的作用仅仅是用来存放一个地址。

  void指针它可以指向任何类型数据。也就是说,可以用任何类型的指针直接给void指针赋值。但是,如果需要将void指针的值赋给其他类型的指针,则需要进行强制类型转换。


2.const指针
  三个例子谈谈const:

  example1:

#include <stdio.h>

void main(void)
{
      const char *str= "Welcome to Fishc.com!\n\n";
      // 这个语句的含义是:声明一个名为str的指针变量,
      // 它指向一个字符型常量,const作用是使一个变量常量化,使其不能被改变,
      // 初始化str为指向字符串,"Welcome to Fishc.com!\n\n"
      printf("\n\n%s", str);
#if (0)
      str[0] = 'w';       //这条语句是错误的,因为是const常量对象,不能不赋值,但可以改变str指针的值 
#endif

      str = "I love Fishc.com!\n\n";   //合法!

      printf("\n\n%s", str);
}

  example2:

#include <stdio.h>

void main(void)
{
      char * const str = "Welcome to Fishc.com!\n\n";
      // 常量指针是一个固定的指针,不可以改变它的值,但它所指的数据可以改变。


      str[0] = 'w';       //合法!编译合法,但是执行结果出错,因为存放在data区,无法改写。

#if( 0 )
      str = "I love Fishc.com!\n\n";   //非法!!
#endif

      printf("\n\n%s", str);
}

  example2:

#include <stdio.h>

void main(void)
{
      const char * const str = "Welcome to Fishc.com!\n\n";
      // 常量指针是一个固定的指针,不可以改变它的值,但它所指的数据可以改变。


      str[0] = 'w';                   //非法!

      str = "I love Fishc.com!\n\n";  //非法!!


      printf("\n\n%s", str);
}

 



猜你喜欢

转载自www.cnblogs.com/tianqizhi/p/10053026.html
今日推荐