说明:本文主要阐述字符串、指针与字符串、函数指针以及指向指针的指针
字符串
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函数中使用函数指针调用。答案