在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
swap(pstart, pend);
pstart++;
pend--;
}
}
char *my_itoa(int n, char *s){
char *pret = s; //转换函数
assert(s != NULL); ///断言。。一种调试方式
if (s != NULL){
if (n
*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;
}
希望大家能够给出建议,共同进步!