9.4 字符串与指针
考点6 字符串及字符指针
真考链接
在选择题中针对考点6 的考查主要以读程序题为主。此知识点属于简单识记内容,在选择题中的考核概率为80%。要求针对字符串做出相应处理的题目较多,考生首先要想到的办法就是采用字符指针,这样写出的代码简单,不易出错。
1. 字符串的表示形式
(1)用字符数组存放一个字符串,然后输出该字符串。
例如:
char str[] ="I am a student.";
printf("% s\n",str);
(2)用字符指针指向一个字符串。
可以不定义数组,而定义一个字符指针,用字符指针指向字符串中的字符。
例如:
char *str="I am a student.";
/*定义str为指针变量,并指向字符串的首地址*/
printf("% s\n",str);
在这里没有使用字符数组,而是在程序中定义了一个字符指针变量str,并使该指针变量指向一个字符串的首地址。C语言对字符串常量是按字符数组进行处理的,在内存中开辟了一个字符数组来存放字符串常量。程序在定义字符指针变量str时,把字符串的首地址赋给str。str只能指向一个字符变量或其他字符类型数据,不能同时指向多个字符数据,更不能理解为把字符串中的全部字符存放到str中(指针变量只能存放地址)。在输出时,利用字符型指针str的移动来控制输出,直至遇到字符串结束标识'\0'为止。
显然,用%s可以控制对一个字符串进行整体的输入/输出。对字符串中字符的存取,与操作其他数组的方法相同,既可以用下标方法,又可以用指针方法。
2. 字符串指针作函数参数
将一个字符串从一个函数传递到另一个函数,可以用地址传递的办法,即用字符数组名作为参数或用指向字符串的指针变量作为参数进行传递。
小提示
如果将一个字符串赋给一个指针变量,那是代表将字符串的第一个字符的地址赋给指针变量。
通过字符数组名或字符指针变量可以一次性输出的只有字符数组(即字符串),而对一个数值型的数组,是不能用数组名输出它的全部元素的,只能借助于循环逐个输出元素。
字符串指针变量作为函数实参,形参可以是字符指针变量,同样也可以是字符数组名。当字符数组名作为函数实参时,形参可以是字符数组名,同样也可以是字符指针变量。
真题精选
若有以下定义:
char s[100] = "string";
则下述函数调用中,( )是错误的。
A.strlen(strcpy(s, "Hello")) B.strcat(s,strcpy(s1, "s"));
C.puts(puts("Tom")) D.!strcmp("",s)
【答案】C
【解析】本题说明了字符串操作类函数的返回指针特性。一些典型的字符串操作函数返回值是字符指针,如strcpy(s1, s2)和strcat(s1,s2),这两个函数都返回s1的值。因此,选项A、选项B正确。选项D中的连续两个 ""组成空字符串,调用正确。选项C中的错误来自函数puts(),该函数的返回值是整数而不是字符串,因此,外层的函数调用使用了错误的实参数。