C指针的应用
关于C指针学了好几次,每次都感觉学会了,其实还是没有.最近在学习grbl,发现了如下这个函数,再继续好好学一下这个C指针.
/*
* 功能:
* 1,把字符串转换为大写;
* 2,去除掉字符串中的空格;
*/
char *strcaps (char *s)
{
char c, *s1 = s, *s2 = s;
do {
c = *s1++;
if(c != ' ')
*s2++ = CAPS(c);
} while(c);
*s2 = '\0';
return s;
}
分析:
- 1,char *strcaps (char *s){}//这是一个指针函数(返回一个char类型的指针),其中定义了一个char类型的指针参数;
- 2,char c,*s1 =s,*s2=s//定义了指针变量s1,s2并把参数的值(地址)赋给它们;
- 3,c = *s1++//为指针s1指向的char赋给c,这里自加的是指针,不是指针指向的值,如果要自加指针指向的值需要小括号括起来(*s1)++;
- 4,while(c)//为判断字符串结束,每个字符串后都会有'/0'(自动添加的);
- return s//指针没变,变的是指针指向的值;
虽然字符串大小写转换和去除空格的方法有很多种,但这个使用指针来完成还是很值得学习的.知识只有通过反复的练习才能掌握,为此我专门写了一个简单的测试程序,测试了一下;
/*
============================================================================
Name : C_Learn_point.c
Author : wobotyuan
Version :
Copyright : robomach
Description : 学习指针的应用
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#define CAPS(c) ((c >= 'a' && c <= 'z') ? (c & 0x5F) : c)
char *strcaps (char *s);
int main(void) {
// puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
char str[]=("!!!Hello World ni hao!!!");
char *p_str=str;
puts(strcaps(p_str));
return EXIT_SUCCESS;
}
/*
* 功能:
* 1,转换字符串到大写;
* 2,除去字符串中的空格;
*/
char *strcaps (char *s)
{
char c, *s1 = s, *s2 = s;
do {
c = *s1++; //s1指向的数,然后指针自加1,这里注意指针就是地址,指针没有变
if(c != ' ')
*s2++ = CAPS(c);
} while(c);
*s2 = '\0';
return s;
}