指针函数
指针函数是指一个函数的返回值为地址量的函数
指针函数的定义的一般形式如下
<数据类型> * <函数名称>(<参数说明>)
{
语句序列;
}
返回值:全局变量的地址/static变量的地址
/字符串常量的地址/堆的地址
下面程序是否有问题,若有问题,如何修改?
第一没有strcpy所需头文件 string.h
第二子函数的变量为局部变量 函数执行完成后内存自动释放 无法引用其返回的地址
#include <stdio.h>
char * mystring( ) {
char str[20];
strcpy(str, “Hello”);
return str;
}
int main(void)
{
printf(“%s\n”, mystring());
return 0;
}
例:编写一个指针函数, 删除一个字符串中的空格
#include <stdio.h>
#include <string.h>
char * del_space(char * s);
int main(int argc, char *argv[])
{
//char * r;
char str[]= " how are you ";
char s[50], s2[50];
// r = del_space(str);
// printf("---%s---\n", r);
//strcpy(s, del_space(str));
strcpy(s2, strcpy(s, del_space(str)));//m=n=k
puts(str);
puts(s);
puts(s2);
return 0;
}
char * del_space(char * s) //char * s = str;
{
char * r = s;
char * p = s;
while (*s) {
if (*s == ' ')
s++;
else {
*p = *s;
s++;
p++;
}
}
*p = '\0';
return r;
}
例:编写一个指针函数, 实现字符串连接
//上课版本
#include <stdio.h>
char * mstrcat(char * dest, const char * src);
int main(int argc, char *argv[])
{
//char * r;
char dest[50] = "welcome";
char src[] = "makeru";
puts(mstrcat(dest, src));
puts(dest);
return 0;
}
char * mstrcat(char * dest, const char * src)
{
char * r = dest;
while (*dest++);
dest--;
while (*dest++ = *src++);
return r;
/*
char * r = dest;
while (*dest++);
dest--;
while (*src) {
*dest++ = *src++;
}
*dest = '\0';
return r;
*/
/*
char * r = dest;
while (*dest) {
dest++;
}
while (*src) {
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return r;
*/
}
//我的作业版本
#include<stdio.h>
char *str_cat(char *dest,char *src);
int main(int argc, const char *argv[])
{
char ch1[50]={"hello"};
char ch2[]={"wusong day9 zuoye"};
str_cat(ch1,ch2);
printf("\n%s\n",ch1);
return 0;
}
char *str_cat(char *dest,char *src)
{
int i=0,j=0;
while(*(dest+i)!= '\0')
i++;
while(*(src+j)!='\0' )
{
*(dest+i)=*(src+j);
j++;i++;
}
return 0;
}
编写一个指针函数,把整数123转化成字符串”123”。
#include <stdio.h>
char * itoa(int n);
int main(int argc, char *argv[])
{
int n;
char * s;
printf("input:");
scanf("%d", &n);
s = itoa(n);
puts(s);
return 0;
}
char * itoa(int n)
{
int r, i = 0, j;
static char p[50];
while (n) {
r = n % 10;
n /= 10;
p[i] = r + '0';
i++;
}
p[i] = '\0';
j = i-1;
i = 0;
while (i < j) {
r = p[i];
p[i] = p[j];
p[j] = r;
i++;
j--;
}
return p;
}