C语言用指针优化销售量表,C语言:指针的运用

本文介绍了C语言中指针的使用,包括利用指针进行类型转换,如itoa和atoi函数的实现,以及如何通过指针查找字符串中的数字、空格和其他字符的个数。通过示例代码详细解析了指针在函数调用和内存操作中的作用,帮助初学者更好地理解和掌握指针的运用。
摘要由CSDN通过智能技术生成

在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;

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值