C_有关指针的数据类型小结
定义 | 含义 |
---|---|
int i; | 定义整型变量i |
int *p; | p为指向整型数据的指针变量 |
int a[n]; | 定义整型数组a,它有n个元素 |
int *p[n]; | 定义指针数组p,它由n个指向整型数据的指针元素组成 |
int (*p)[n]; | p为指向含n个元素的一维数组的指针变量 |
int f(); | f为带回整型函数值的函数 |
int *p(); | p为带回一个指针的函数,该指针指向整型数据 |
int (*p)(); | p为指向函数的指针,该函数返回一个整型值 , |
int **p; | p是一个指针变量,它指向一个指向整型数据的指针变量 |
int (*p)()
可以用指针变量指向整型变量、字符串、数组,也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数的入口地址就称为函数的指针 int max(int, int); int (*p)(); //声明指向函数的指针 p = max;
int *p()
一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。其概念与以前类似,只是带回的值的类型是指针类型而已。
double *search(double(*pointer)[4], int n);
一、指针变量加(减)一个整数
例如: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为已定义的函数,将ma x的入口地址赋给p)
p1=p2;(p1和p2都是指针变量,将 p2的值赋给p1)
两个指针变量可以相减
如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数
两个指针变量比较
若两个指针指向同一个数组的元素,则可以进行比较。指向前面的元素的指针变量“小于”指向后面元素的指针变量。
关于 void类型
void真正发挥的作用在于:
(1) 对函数返回的限定;
(2) 对函数参数的限定。
例如:void abc( void ); 谈谈void类型用于指针!
void指针 和 const指针
ANSIC新标准增加了一种“void”指针类型,即不指定它是指向哪一种类型数据的指针变量。
例如:void *p;
表示指针变量p不指向一个确定的类型数据,它的作用仅仅是用来存放一个地址。
void指针它可以指向任何类型数据。也就是说,可以用任何类型的指针直接给void指针赋值。但是,如果需要将void指针的值赋给其他类型的指针,则需要进行强制类型转换。