复杂类型确认:
1.int * p[10]:数组,元素为10个指针(右结合)
2.int (*p)[10]:指针,指针的类型是int [10],是一个数组。
不同于指向数组首元素,而是指向整个数组,p+1为+40(byte)
3.int * * p:指针,指向指针的指针。二级指针可以用来改变指针的指向。
4.int * p(int):函数,返回值是一个指向整型的指针
5.int (*p)(int):指针,指向一个函数
const关键字:
可用于修饰指针变量
1.const出现在*之前:p指向的地址可以改变,*p不可以被改变。
2.const出现在*之后:p指向的地址不可以改变,*p可以改变
注意:const char * const p,为*p和p都不可改变。
指针和字符串的关系:
1.用指针来遍历字符串的所有字符
1) char ch[20];
char *p = ch;
for(;p!=‘\0’;p++){
}
2)char *p = “qianfeng”
注意:1)和2)的区别在于。z
返回指针的函数:
char * ch(){
return “qianfeng”
}
指向函数的指针(指向函数名:函数的入口地址):
1.函数的地址就是函数名
int sum(int a,int b);
定义一个指向函数的指针变量p
被p指向的函数:返回值int类型,接受两个int类型的参数
int (*p)(int,int) = sum;
2.利用指针变量p间接调用sum函数:
1) (*p)(5,6);
2) p(5,6);
3.为什么要让指针指向函数
1)可以将这个函数作为参数进行传参