C语言学习篇-10指针与字符串、函数指针

说明:本文主要阐述字符串、指针与字符串、函数指针以及指向指针的指针

字符串

1.字符串:由数字、字母、下划线组成的一串字符。是表示文本的数据类型。以\0结尾。
2.输出时字符串所用的格式符为“%s”。
3.字符串的三种写法:

Char name[8]=“yang”;//数组占用了8个字节的存储空间,但是只含有5个字符。
Char name[8]={‘y’+‘a’+‘n’+‘g’+‘\o’};
Char name[8]={‘y’+‘a’+‘n’+‘g’+‘0’};

4.在C语言中,我们可以用两种方式访问字符串。

  • 用字符数组存放一个字符串,然后输出该字符串。
#include <stdio.h>

int main() {

    char string[]="I love C language!";

    printf("%s\n", string);

    return 0;
}
  • 用字符指针指向一个字符串。可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。
#include <stdio.h>

int main() {

    char *string="I love C language!";

    printf("%s\n", string);

    return 0;
}
//没有定义字符数组,而是在程序中定义了一个字符指针变量string,用字符串常量"I love C language!",对它进行初始化。

C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来才存放该字符串常量。对字符指针变量初始化,实际上是把字符串第1个元素的地址(即存放字符串的字符数组的首元素地址)赋给string。
5.使用注意

  • “\0”的作用
#include <stdio.h>

int main() {

    char *string="I love C lan\0guage!";//打印I love C lan

    printf("%s\n", string);

    return 0;
}

6.strlen函数
strlen函数计算字符串的长度(字符数)但不包括\0,是字符数不是字数。

  • strlen(“cccc”);//长度为4

  • strlen(“c语言”);//长度为7而不是3,一个汉字占三个字符。

#include <stdio.h>

int main() {

    char name[] = "it\0test";

    printf("%lu\n",strlen(name));

    return 0;
}

打印结果值为2,因为strlen从字符串的地址开始计算,直到遇到\0为止。

7.二维字符数组
存储两个字符串数组,下面是两种写法但存储情况是一样的。

Char name[2][10]={“jack”,“rose”};

Char name2[2][10]={
                  {‘j’+‘a’+‘c’+‘k’+‘\0’},
                  {‘r’+‘o’+‘s’+‘e’+‘\0’}}

函数指针

1.函数指针:指向函数的指针变量。
对于一个函数而言,函数名也是指向函数第一条指令的常量指针。而编译器要做的就是在程序编译之后,为每个函数分配一个首地址,即该函数第一条指令的地址。一般情况下,我们可以用一个指针来保存这个地址,而这个指针就是函数指针,该指针可以看作是它指向函数的别名,所以我们可以用该指针来调用这个函数。
2.如何声明?
格式:返回值类型(*函数名)(参数)
示例int (*p)(int x,int y);//定义了一个p指针,指向了一个函数,这个函数带有两个int类型参数,函数的返回值为int类型
3.如何使用?
示例:

#include <stdio.h>

int maxValue(int x,int y){
    return x > y ? x : y;
}

int main() {

    int a = 12, b = 24;

    int (*p)(int a,int b) = maxValue;

    int max = p(a,b);

    printf("%d\n",max);

    return 0;
}

4.使用注意

  • 指针类型必须与指向的数据的类型匹配,函数有类型,函数指针必须和函数的类型保持一致。
int (*p)(int x,int y);//p指针类型为int (*)(int,int)
  • 一个指向函数的指针必须确保该函数被定义且分配了内存,否则它将指向一个空地址。
  • 特别需要注意第一个括号。
int *p(int x,int y);//这不是一个指向函数的指针,而是声明了一个函数,该函数返回一个int类型指针。

总结

1.strlen函数计算字符串的长度(字符数)但不包括\0;
2.函数指针的类型必须与所指向的函数类型一致。

练习

1.编写一个函数char_contains(char str[],char c),如果字符串中包含字符c,则返回1,否则返回0,并在main函数中使用函数指针调用。答案

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值