码迷,mamicode.com
首页 > 编程语言 > 详细

C语言:指针的运用

时间:2015-08-20 10:51:56      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:c语言     指针   字符串

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

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

本文出自 “moLova” 博客,请务必保留此出处http://molova.blog.51cto.com/10594266/1686254

C语言:指针的运用

标签:c语言     指针   字符串

原文地址:http://molova.blog.51cto.com/10594266/1686254

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!