1.字符指针变量
字符指针char*
#include<stdio.h>
int main()
{
char ch='w';
char*pc=&ch;
*pc='w';
return 0;
}
另一种方式:
int main()
{
const char*pstr="hello bit.";
printf("%s\n",pstr);
return 0;
}
const char*pstr="hello bit.";本质上是把字符串首字符的地址放到了pstr中。
2.数组指针变量
存放的是数组的地址,能够指向数组的指针变量。
数组指针变量:
int (*p)[10];
p是指针变量变量,指向一个大小10个整型的数组,叫数组指针。
3.二维数组传参的本质
#include<stdio.h>
void test(int arr[3][5],int r,int c)
{
int i=0;
int j=0;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
int main()
{
int arr[3][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};
test(arr,3,5);
return 0;
}
二维数组传参本质上也是传递了地址,传递的是第一行一维数组的地址,那么形参也是可以写成指针形式的,如:
#include<stdio.h>
void test(int(*p)[5],int r,int c)
{
int i=0;
int j=0;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%d ",*(*(p+i)+j));
}
}
}
int main()
{
int arr[3][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};
test(arr,3,5);
return 0;
}
二维数组传参,形参部分可以写成数组,也可以写成指针形式。
4.函数指针变量
通过函数指针调用指针指向的函数
#include<stdio.h>
int Add(int x,int y)
{
return x+y;
}
int main()
{
int (*pf3)(int,int)=Add;
printf("%d\n",(*pf3)(2,3));
printf("%d\n",pf3(3,5));
return 0;
}
输出结果 ;5 8
5.函数指针数组
把函数的地址存到一个数组中,这个数组叫函数指针数组。
定义:
int (*parr[3])();
parr和[ ]结合,说明parr是数组,数组的内容是int(*)()类型的函数指针。