1、定义
指针函数是一个返回值为指针的函数
2、声明格式
数据类型 * 函数名称(参数){
语句;
}
3、代码找茬
3.1 错误代码示例
#include <stdio.h>
#include <string.h>
char * mystring( ) {
char str[20];
strcpy(str, “Hello”);
return str;
}
int main(void)
{
printf(“%s\n”, mystring());
return 0;
}
3.2 代码分析
上述代码中,main函数即为打印一个字符串,字符串通过mystring()函数获得。在mystring()函数中,首先声明了一个字符数组str[],然后将“Hello”复制给字符数组str[],最后返回str[]数组。
大致一看,似乎没有什么问题,但是结果是乱码。输出一定是str[]的内容,而str[]是mystring()函数的局部变量,在mystring()函数运行结束时,字符数组str[]从内存释放,于是输出为乱码。
如果不想str[]从内存释放,可以将其改为static变量、字符串常量或全局变量。即将char str[20]改为static char str[20]即可。
4、练习
4.1 编写一个指针函数,删除一个字符串中的空格
#include <stdio.h>
#define N 50
char *myDelSpaceFun(char *p);
int main(int argc, const char *argv[])
{
char mystr[N] = "This is my homework.";
printf("%s\n",myDelSpaceFun(mystr));
return 0;
}
char *myDelSpaceFun(char *p)
{
//使用数组
int i = 0 ;
static char x1[N];
while(*p != '\0')
{
if(*p == ' ')
{
p++;
}
else
{
x1[i] = *p;
p++;
i++;
}
printf("i = %d , x1=%c\n",i , x1[i]);
}
x1[i] = '\0';
return x1;
}
#include <stdio.h>
#define N 50
char *myDelSpaceFun(char *p);
int main(int argc, const char *argv[])
{
char mystr[N] = "This is my homework.";
printf("%s\n",myDelSpaceFun(mystr));
return 0;
}
char *myDelSpaceFun(char *p)
{
//使用指针
char *r = p , *w;
w = p;
while(*p != '\0')
{
if(*p == ' ')
{
p++;
}
else
{
*r = *p;
p++;
r++;
}
}
*r = '\0';
r = w;
return r;
}
4.2 编写一个指针函数,实现字符串连接
#include <stdio.h>
#define N 50
char *mystrcat(char *p , char *q);
int main(int argc, const char *argv[])
{
char mystr[N] = "This is my homework.";
char yourstr[N] = "This is your homework.";
printf("%s\n",mystrcat(mystr , yourstr));
return 0;
}
char *mystrcat(char *p , char *q)
{
char *r = p;
while(*p != '\0')
{
p++;
}
while (*q != '\0')
{
*p = *q;
p++;
q++;
}
*p = '\0';
return r;
}
第一次书写这种技术博文,如有错误,还望指出,谢谢,也希望广大网友能不吝赐教,共同交流,共同进步。