c指针
对于一个指针首先要知道它的类型是什么,指向什么
例子:
int *p //它的类型是int * , 指向的类型是 int 类型
int **p1 //类型是int ** ,指向的类型是 int *类型
对于上面来说,p++ = &p + sizeof(int) ,向后增加4个字节
p1++ = *(&p + 4) ,此时 再输出**p1,则就指向未知的地方了
指针中的优先级:()>后缀操作符()或者[ ]>*
例1:对于 int * p[3]
#include <stdio.h> int main() { int *p[20]; //首先看优先级[]>*,那么他就是指针数组,拥有20个int *的数组 int a = 1,b =2; p[0] = &a; //数组中存放a的地址 p[1] = &b; printf("%d,",*p[0]); //输出时要进行指向 printf("%d",*p[1]); return 0; //总结:其实这里就是一组数组中存放的是整型数据的内存地址 //输出时要加*进行数据读取 }
例3:对于int ( * p)[2]
#include <stdio.h> int main() { int a[2][2] = {0,1,2,3}; //二维数组指针 ,第一种获取地址方法 //int (*p)[2] = a; //先看()中的是一个指针,再看外面int [2]是整型数组,则为 int (*p)[2]; p = a; //第二种方法 printf("%d,",(*p)[0]); printf("%d,",(*p)[1]); printf("%d,",(*p)[2]); printf("%d",(*p)[3]); return 0; //总结:实质就是一维数组,输出也要带* }
例3: 对于int ( * p)(int,int)
#include <stdio.h> int max(int a,int b) { return a>b?a:b; } int main() { //第一种 int (*p)(int,int) = max; //第二种 //int (*p)(int,int); //也可以用指针指向函数地址 //p = &max; printf("%d",(*p)(4,5)); return 0; }