在C语言中,指针是非常强大的工具。通过对指针的灵活运用,可以使程序的编写更加高效。指针既可以传值也可以传递地址。正是由于指针的灵活性,所以像博主这种新手在使用起来很容易犯错,导致程序崩溃。
因此,理解指针的用法以及他在函数中的调用方式是非常重要的,这也是博主正在努力的目标。根据最近几天的学习,博主在此要分享几个跟指针的使用有关的小例子,大家一起学习学习。
1.类型转换(itoa)
#include<stdio.h> #include<string.h> #include<assert.h> 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<stdio.h> #include<string.h> 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<stdio.h> #include<ctype.h> 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; }
希望大家能够给出建议,共同进步!
时间: 2024-10-01 05:21:37