指针运算符和自增运算符
char str;char *target = str;
printf("请输入一个字符串:");
fgets(str, MAX, stdin);
while (*target++ != '\0')
{
length++; //但由于这是一个后缀的自增运算符,所以自增的效果要在下一条语句才会生效,因此这里取出来的依然是 target 地址自增前指向的数组元素的值。(小甲鱼笔记)
}
printf("您总共输入了 %d 个字符!\n", length - 1);
请问两个问题:
1. 上面“小甲鱼笔记”那句话怎么理解呢? *target++!='\0' 是从*target(也就是str)开始还是*target++(也就是str)开始呢?要是第二种情况的话,那么str不就没有记录到吗?
2. 为什么最后算长度要length-1呢? ba21 发表于 2020-2-18 23:26
*target(也就是str)开始
长度要length-1呢 鬼知道你length初始化是几
length初始化是0.
首先谢谢你的回答
其次你的语气很高傲让人很不舒服,如果你觉得很简单或者是不想回答可以不用回答。
谢谢。 刚刚自己在网上又查阅了一番资料,大概明白了,也欢迎其他人指正
小甲鱼这里是获取的字符串长度是用while 循环用指针指向数组元素来判断,目的也是为了实现strlen。
下面方法也是实现strlen:
length = sizeof(str)-1;//包含空格, 但 减1 这个原理和我上面的问题好像是一样的
之所结果要减1,是因为字符串结束符'\0‘在数组中占用了一个字节。(其实两种情况好像和length是否为多少没关系??) ba21 发表于 2020-2-18 23:26
*target(也就是str)开始
长度要length-1呢 鬼知道你length初始化是几
还有,不是我玻璃心,自尊心强,如果不是很想回答或者觉得我很弱智,放心里就行,不必留言无关知识其他内容。
我是广大初学者中的一员。
就是因为抱着学好的热情才会 认真做题和查阅资料并且询问鱼吧各位朋友。
当然我们的难题在您们那儿很弱智,但对于我们了解知识的道路却很重要。
不管您是出于工作责任,或者攒分数鱼币其他情况,给他人造成不悦都是没有必要的。
希望鱼C越来越好。我很喜欢这个学习知识相互交流的平台。 LXMARCO 发表于 2020-2-19 01:37
还有,不是我玻璃心,自尊心强,如果不是很想回答或者觉得我很弱智,放心里就行,不必留言无关知识其他内 ...
嗯嗯,赞同,大家应该平心静气来交流学习上的问题。
LXMARCO 发表于 2020-2-19 01:37
还有,不是我玻璃心,自尊心强,如果不是很想回答或者觉得我很弱智,放心里就行,不必留言无关知识其他内 ...
加油{:5_108:} 你的自尊心这么强还到这问什么问题。
代码不上全,好心答你,还闲别人语气差。你以为你是交了几十百把万的学生,老师都要哄到你,你就开心了。 把target++看成一个表达式,其含义是先以target作为该表达式的值,再自增
*target++也就是先运算*target后再target+1因此这个target+1在下一次循环中才成为*(target+1)
我这样解释对吗?
另外我也是初学者,不觉得这个问题很智障,这里是大家学习交流的地方,秀优越感去某乎可好? ba21 发表于 2020-2-19 14:20
你的自尊心这么强还到这问什么问题。
代码不上全,好心答你,还闲别人语气差。你以为你是交了几十百把万的 ...
1. 首先你是不是一位“老师”,有待考证。
2. 我没有要求任何 “哄” , 我只要需要有人能回答我的问题,我语气也很诚恳“,我说的是“请,谢谢”。 我不要求语气很好,但觉不会接受无端的无礼,你不开心你可以完全选择不回答我的问题。 而不是把你的情绪宣泄在我这里。
3. 你提到钱。 现实中宣传自己补课机构的都要试听课,我愿意交钱也是冲着小甲鱼的态度和精神。 我没有对鱼C有任何看法,我从头到尾都是对您的态度有保留意见。我对事不对人,不好的我就指出来。
4. 您是否应该态度中等(我不要求您有好),至少语气不要那么高傲,这一点您应该询问您的老板。 鱼C这么多流量平台,您头像放着可能是您私人工作室广告,这也能达到您的其余宣传目的,既然您有得到就需要有付出,您下面写着版主,那就是为我们解答疑惑,至于这个过程有什么要求,我想”解答疑惑,实习版主“这个身份应该是有一定的职业要求的吧?
5. 您也是还是钱的问题。很多都是开源,我也不要求您像Linus他们那样,网课那么多,coursera,udacity之类的免费网课如此之多,您如果觉得您的才识和您 ”尊敬的语言“ 是为RMB服务,大可自行开个网站教学收费询问。您不喜欢我们这种小白,可以选择不回答。
6. 因为您回复我的问题,我作为 ”顾客“ 我当然有权利对您的 ”服务“ 进行评价和打分。即使我是一个学生,都有权利期末对老师教学测评。不好的地发我只是提出建设性意见,希望不要因为您一次可能不是因为主观的失误影响到您的团队,我也是希望大家更好,您的顾客多了流量多了是不是才有希望 ”变现“呢?
7. 您的再一次回复我只是感觉到了更大的傲慢,”自尊心这么强问什么还来问什么问题?“,您的意思是只要是问问题的人,您就有权利以任何差语气回答,而且对方必须接受,如果不接受就去别的地发对吗?
8. ”你以为你是交了几十百把万的学生,老师都要哄到你,你就开心了。“, 我的开心完全不去绝于 ”哄“, 而是能正常解答一个我的疑惑。 若您的回答是 ”你的length没说初始值“ 有何不好呢?简单高效。 您选择”鬼知道你的XXXX“还特意标成红色,是想表达什么呢?
9. 谢谢,我没有任何侮辱您人格的意思,我只是针对这次回答问题作出我真实感受和反馈,当然您可以选择接受或者不接受。我的出发点,说出我的感受是想小甲鱼的鱼C会越来越好,因为今天不好的感受会发生在我身上,明天可能就在别人身上。
10. 感谢鱼C这个平台提供的教学和学习机会,希望越来越好。 Zhighway 发表于 2020-2-19 14:43
把target++看成一个表达式,其含义是先以target作为该表达式的值,再自增
*target++也就是先运算*target后 ...
其实我不是很明白是因为*target++ 中++ 运算符优先*运算符,但是运行的时候是从*target开始的,不是从++。
刚刚看了你的回答和程序的实际运行,你说的是对的。谢谢你!
我分享一下我之前找到的一些小知识(能解决我这个问题):
第一组:*p++,它的运算顺序是先返回 *p的值,然后p再++。
第二组:(*p)++,他的运算顺序是先返回 *p的值,然后 *p的值再++,这一点从运算后的数组a的值可以看出来。
第三组:*(p++),运算顺序是先返回 *p的值,然后p再++,也就是说它和 *p++的运算顺序一样。
这三组都是先返回 *p的值,区别就在于到底是p++还是 *p的值++。
第四组:++*p,先将 *p的值++,然后再返回 *p的值。
第五组:++(*p),先将 *p的值++,然后再返回 *p的值,所以它和++ *p是一样的。
第六组: * (++p),先将p的值++,然后再返回 * p的值,和 *++p是等价的。
这三组的特点是最后都是返回 *p的值,不同点在于是 *p先++还是p++。
LXMARCO 发表于 2020-2-19 18:34
其实我不是很明白是因为*target++ 中++ 运算符优先*运算符,但是运行的时候是从*target开始的,不是从+ ...
{:10_257:}棒噢
页:
[1]