在C语言中,指针是非常强大的工具。通过对指针的灵活运用,可以使程序的编写更加高效。指针既可以传值也可以传递地址。正是由于指针的灵活性,所以像博主这种新手在使用起来很容易犯错,导致程序崩溃。

因此,理解指针的用法以及他在函数中的调用方式是非常重要的,这也是博主正在努力的目标。根据最近几天的学习,博主在此要分享几个跟指针的使用有关的小例子,大家一起学习学习。

1.类型转换(itoa)

#include
#include
#include
void  swap(char  *a, char  *b){        int tmp = *a;        //用指针实现两个实参的交换,定义一个临时变量存放参数的值 *a = *b;             //*a和*b指向实参的地址 *b = tmp;}void  reverse(char  *pstart, char *pend){           //将数字存入数组中时顺序是逆序的,此    assert(pstart != NULL && pend != NULL);     //函数将逆序的字符翻转 while (pstart < pend){              // swap(pstart, pend); pstart++; pend--; }}char  *my_itoa(int n, char *s){         char *pret = s;           //转换函数 assert(s != NULL);          ///断言。。一种调试方式 if (s != NULL){ if (n < 0){            //对数字中负数的处理 *s = '-'; n = n *(-1); s++; } while (n ){ *s = n % 10 + '0';           //将数字的每一位取下 n /= 10;                     //模除 s++; } *s = '\0';         if (*pret == '-')               //负数 reverse (pret+1,pret+strlen(pret)-1); else                               //正数 reverse(pret,pret + strlen(pret )-1); return pret; } return NULL;}int main(){ int num = 0; char arr[20]; printf("请输入数字:\n"); scanf_s("%d", &num); char *pret = my_itoa(num,arr ); printf("%s\n", pret); return 0;}

2.类型转换(atoi)

#define _CRT_SECURE_NO_WARNINGS 1#include
#include
int my_atoi(char a[]){ char *p = a; int flag = 1; int ret = 0; while (isspace(*p)){         //isspace函数可以判断字符串中的空字符 p++; } if (*p == '-')        //判断是否为负数 flag = -1; if (*p == '+' || *p == '-'){        //跳过符号位 p++; } while (*p != '\0'){ ret = ret * 10 + *p - '0';        //减字符0(ASCII值为48)得到真正的数值 p++; } return flag * ret ;      //实现负数的输出}int main(){         int arr[10]; printf("请输入数字:\n"); gets(arr); int ret = my_atoi(arr); printf("%d\n", ret); return 0;}

3.查找字符串中的各类字符个数

#define _CRT_SECURE_NO_WARNINGS 1#include
#include
int main(){     char a[20];     int i = 0;     int j = 0;     int k = 0;     char *p;                         //也可在定义指针时初始化char *p =a;     printf("请输入字符串:\n");    gets(a);    p = a;          //指针p指向数组a的首地址 while (*p != '\0'){ //字符串没有结束 if ((*p >= 48) && (*p <= 57)){      //对数字字符的检测 i++; } else if (isspace (*p )){ //对空字符的检测        j++;                                   } else                            //对其他字符的检测        k++; p++;       //指针指向下一个字符 } printf("数字出现%d次,空白字符出现%d次,其他字符出现%d次\n", i, j, k); return 0;}

希望大家能够给出建议,共同进步!