C语言指针

                 指针在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];

  1. 访问:通过索引操作符 [] 访问数组中的单个元素,如 arr[i] 就是第 i 个元素的地址。

  2. 修改与解引用:若想操作指针指向的内容,先解引用 *(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*);

                  

  1. 声明函数指针:首先,定义一个函数指针类型,指定该指针指向的函数的参数类型和返回类型,例如 int (*func_ptr)(int, int) 表示一个接受两个整数参数并返回整数的结果的函数。

  2. 定义函数:创建实际的函数,这个函数满足上述的函数指针所要求的参数和返回类型。

  3. 分配函数地址:通过函数名前加取址运算符 & 来得到函数的实际地址,并将其赋值给函数指针。

  4. 调用函数:通过函数指针调用函数,像普通函数那样使用,例如 (*func_ptr)(arg1, arg2),其中 arg1arg2 是传给函数的实际参数。

  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;
}

函数指针数组有助于,我们简介代码。

一下是我对指针的总结。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值