C语言函数指针,typedef定义函数指针类型,strchr/strstr/strtok函数, 二维数组和二维指针寻址方式完全不一样

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1. 

int (*func) (int, int);

typedef int (*FUNC) (int, int);

第一种方法函数指针func可以直接使用

第二种方法只是定义一种类型还需要自己去使用

func = add; func(10, 20);

FUNC func_copy = add; func_copy(20, 30);

2.

对于一维数组如果函数参数为一维指针可以直接用数组名当做函数参数。但是如果函数参数为二维指针直接用二维数组名做参数会出现访问出错是因为二维指针和二维数组的访问方式不同造成的需要如示例代码中做转换。

另外一种常用的方法是利用二维数组的内存连续性将二维数组转为一维数组处理

3. 

strchr/strstr:查找子串出现的位置

它们一个是求一个字符在字符串中得位置另一个是求一个字符串在另一个字符串中的位置。

strtok:按指定的字串分割原字符串

#include <string.h>
#include <stdio.h>
 
int main () {
   char str[80] = "This is - www.runoob.com - website";
   const char s[2] = "-";
   char *token;
   
   /* 获取第一个子字符串 */
   token = strtok(str, s);
   
   /* 继续获取其他的子字符串 */
   while( token != NULL ) {
      printf( "%s\n", token );
    
      token = strtok(NULL, s);
   }
   
   return 0;
}

主要内容

1、函数的作用是分解字符串所谓分解即没有生成新串只是在s所指向的内容首次出现分界符的位置将分界符修改成了'/0’故第一次用strtok()返回第一个子串

2、第一次提取子串完毕之后继续对源字符串s进行提取应在其后(第二次第三次。。。第n次)的调用中将strtok的第一个参数赋为空值NULL(表示函数继续从上 一次调用隐式保存的位置继续分解字符串;对于前一次次调用来说第一次调用结束前用一个this指针指向了分界符的下一位

3、当this指针指向“\0” 时即没有被分割的子串了此时则返回NULL

4、可以把delim理解为分隔符的集合delim中的字符均可以作为分隔符。

5、strtok在调用的时候如果起始位置即为分隔符则忽略了起始位置开始的分隔符

4.

指针数组和二维数组指针在定义时非常相似只是括号的位置不同:

  1. int *(p1[5]); //指针数组可以去掉括号直接写作 int *p1[5];
  2. int (*p2)[5]; //二维数组指针不能去掉括号

指针数组和二维数组指针有着本质上的区别:指针数组是一个数组只是每个元素保存的都是指针以上面的 p1 为例在32位环境下它占用 4×5 = 20 个字节的内存。二维数组指针是一个指针它指向一个二维数组以上面的 p2 为例它占用 4 个字节的内存。 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“C语言函数指针,typedef定义函数指针类型,strchr/strstr/strtok函数, 二维数组和二维指针寻址方式完全不一样” 的相关文章