指针在C语言中,占有非常重要的位置,一下是我总结的C语言指针的相关问题
1 字符指针
字符指针 表示:char*;
int main()
{
char a = 'hello';
char *p = &a;
*p = 'hello';
return 0;
}
还有一种使用方式如下:
int main()
{
char* p = "hello";
printf("%s\n", p);
return 0;
}
代码 char* p = "hello"; 特别容易让同学以为是把字符串 hello 放到字符指针 p里
了,但是/本质是把字符串 hello . 首字符的地址放到了p中。;
2 指针数组
指针数组,指针数组是一个存放指针的数组 一般的int* arr1[10];
-
访问:通过索引操作符
[]
访问数组中的单个元素,如arr[i]
就是第 i 个元素的地址。 -
修改与解引用:若想操作指针指向的内容,先解引用
*(arr[i])
,然后进行相应操作。例如,(*(arr[i]))++
即增加第 i 个元素的值。
3 数组指针
数组指针顾名思义,数组的指针int (*p)[10];
解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个
指针,指向一个数组,叫数组指针。
这里要注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。
代码示例
void print_arr(int (*arr)[5], int row, int col)
{
int i = 0;
for(i=0; i<row; i++)
{
for(j=0; j<col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int arr[3][5] = {1,2,3,4,5,6,7,8,9,10};
print_arr(arr, 3, 5);
return 0;
}
4 函数指针
就是函数的指针;void (*p)(void*,void*);
-
声明函数指针:首先,定义一个函数指针类型,指定该指针指向的函数的参数类型和返回类型,例如
int (*func_ptr)(int, int)
表示一个接受两个整数参数并返回整数的结果的函数。 -
定义函数:创建实际的函数,这个函数满足上述的函数指针所要求的参数和返回类型。
-
分配函数地址:通过函数名前加取址运算符
&
来得到函数的实际地址,并将其赋值给函数指针。 -
调用函数:通过函数指针调用函数,像普通函数那样使用,例如
(*func_ptr)(arg1, arg2)
,其中arg1
和arg2
是传给函数的实际参数。
5 函数指针数组
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a*b;
}
int div(int a, int b)
{
return a / b;
}
int main()
{
int x, y;
int input = 1;
int ret = 0;
int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
while (input)
{
printf( "*************************\n" );
printf( " 1:add 2:sub \n" );
printf( " 3:mul 4:div \n" );
printf( "*************************\n" );
printf( "请选择:" );
scanf( "%d", &input);
if ((input <= 4 && input >= 1))
{
printf( "输入操作数:" );
scanf( "%d %d", &x, &y);
ret = (*p[input])(x, y);
}
else
printf( "输入有误\n" );
printf( "ret = %d\n", ret);
}
return 0;
}
函数指针数组有助于,我们简介代码。
一下是我对指针的总结。