中易网

请问c语言中类似 *q=(*p)-'0' 这样的语句要怎么理解。。。实在看不懂,求教

答案:2  悬赏:50  
解决时间 2021-01-14 09:20
  • 提问者网友:孤凫
  • 2021-01-13 20:49
请问c语言中类似 *q=(*p)-'0' 这样的语句要怎么理解。。。实在看不懂,求教
最佳答案
  • 二级知识专家网友:酒者煙囻
  • 2021-01-13 21:25
*p--=0表示先对指针p所指向的内存单元赋值为0,之后,将指针p的地址减1一个内存单元的大小。

可以通过如下的程序段来进行理解:
int a[]={1,2,3,4}; // 定义一个int型数组,并进行初始化
int *p=&a[2];// 定义一个int型指针变量,并指向a[2]所在的内存单元
printf("%x\n", p); // 输出指针p的内存地址,结果为0x2cfb28
*p--=0;// 将内存地址为0x2cfb28的内存单元赋值为0(即a[2]=0),之后内存地址减4(因为一个int类型占4个存储单元)
printf("%x\n", p); // 输出指针p的内存地址,结果为0x2cfb24
以上程序执行后数组a的值为1 2 0 4
————————————————

  如果能够帮助你,麻烦采纳

  你的采纳是我答题的动力

  ——谢谢你给我的支持!!!
全部回答
  • 1楼网友:第幾種人
  • 2021-01-13 22:39
凡是变量前面带有星号的,表明此变量是一个地址。例如:*q, *p表示q和p都是地址。
地址和星号合起来表示,地址指向的数据。
q是地址,*q表示一个数据。p是地址,*p表示一个数据。
‘0’表示一个字符,用于数值计算时,采用其ASCII码进行计算,即48.
所以*q=(*p)-'0'相当于,一个数据减去48之后的结果赋值给另外一个值。
类似于 A=B-48
追问:
图中代码中这一步又要怎么理解呢,求指教就是if之后括号内的要怎么理解
追答:if (*p >='0' && *p<='9') //判断第一个输入的字符是否是数字(0到9之间)
{
*q = (*p)-'0';//*p是输入的字符,*q用于保存此字符对应的数字
p++;//指针指向下一个输入的字符
while(*p>='0' && *p<='9') //只要输入字符还是数字(说明数字没有读完)
*q = (*q)*10 + (*p(++)-'0'); //因为数字还要继续读,所以 *q=原来的数据*10+当前数字
num+=1; //程序退出while时,说明数字已经完结,所以数字数量+1
q==1; //q地址指向下一个数据空间,准备读取新数字
}
追问:我的主要问题是不理解z在这个程序中为什么不是*q=*p就好,而要*q=*p-'0'
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息