C语言指针的问题 能帮我分析下以下的代码吗,看不太明白

#include <stdio.h>
int main(void)
{
char *p,s[6];
int n;
n=0;
p=s; /*字符指针p指向字符数组s*/
printf("输入你要转换的八进制数:\n");
gets(p); /*输入字符串*/
while(*(p)!='\0') /*检查指针是否都字符数组结尾*/
{
n=n*8+*p-'0'; /*八进制转十进制计算公式*/
p++; /*指针后移*/
}
printf("转换的十进制是:\n%d\n",n);
return 0;
}

#include <stdio.h>
int main(void)
{
char *p,s[6]; //定义6个长度的字符数组和一个指向字符的指针
int n; //定义整形变量n
n=0; //给n赋初值0
p=s; //一维数组名代表数组第一个元素的地址,即p存着s[0]的地址
printf("输入你要转换的八进制数:\n"); //输入提示
gets(p); //输入字符串,在最后一个字符后面会自动加'\0'
while(*(p)!='\0') //对指针p解引用,并判断是否为'\0',即判断字符串是否已经结束
{
n=n*8+*p-'0'; //*p就是p所指向的字符,*p-'0'就是p所指向的字符的ASCII减去0的ASCII,就是这个字符所代表的真实数字
p++; //指针后移,由于指针指向一维数组,即代表指针指向下一个元素
}
printf("转换的十进制是:\n%d\n",n); //输出结果
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-28
p指向数组s,当你输入一段字符串时,会存储在数组s所占的那片内存,
然后再逐字符进行n=n*8+*p-'0'运算
第2个回答  2012-04-28
全程序的关键点是:n=n*8+*p-'0'
*p-'0' 是把读到的一个字符转换为 数字
比如'1'对应的1
n*8就是给读取的数字加权重
比如个位个数字权重是1 十位的是8 百位的就是64了
还有就是 p=s这句话也很巧妙
把这两句话好好理解 对自己的作用很大
第3个回答  2012-05-01
你是什么地方看不懂能画出来吗!要是你全看不懂的话,建议你先把进制转化的问题练一练、然后再把指针练一练,最后再回过头来看这个程序!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网