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真正发挥的作用在于:
- 对函数返回的限定;
- 对函数参数的限定。
例如: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指针的值 #endifstr = "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"; //非法!! #endifprintf("\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); }