自增自减与指针相关
2019-07-30 本文已影响0人
mark_x
自增自减
简单的使用i++
不会产生什么问题,比较麻烦的是使用变量与变量自增(自减)混在一起的时候,下面是关于这个问题的分析。
// 自增自减写在变量前后的区别
// 如果++写在变量的前面,则会先将变量自增,再用自增后的结果参与运算
// 如果++写在变量的后面,则会先将变量的值参与运算,再将变量自增
// 自减与自增一样
int a = 10; // a -> 10
int b = a++; // b -> 10 a -> 11
int c = ++a; // c -> 12 a -> 12
printf("a --> %i\n", a); // a --> 12
printf("b --> %i\n", b); // b --> 10
printf("c --> %i\n", c); // c --> 12
int a = 10; // a --> 10
// int b = (a++) + (++a); // a --> 12 b --> 22
// int b = (a++) + (a++); // a --> 12 b --> 21
int b = (++a) + (++a); // a --> 12 b --> 23
---------------------
作者:crazy_zhangcong
来源:CSDN
原文:https://blog.csdn.net/crazy_zhangcong/article/details/87916766
版权声明:本文为博主原创文章,转载请附上博文链接!
指针变量
指针变量进行自增自减时,其指向位置。
获取字符串的长度
#include <stdio.h>
#define MAX 1024
int main()
{
char str[MAX];
char *target = str;
int length = 0;
printf("请输入一个字符串:");
fgets(str, MAX, stdin);
while (*target++ != '\0')
{
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1); // 注意length -1
return 0;
}
注意: fgets 函数会把换行符('\n')也一并读取进去。
考虑一种简单地情况,字符串str
只有一个字符。
第一次循环:
- 自增的优先级高于取值运算符,执行
target++
。前面写到,如果++写在变量的后面,则会先将变量的值参与运算,再将变量自增,则实际上语句*target++
相当于执行*target;
,此时target →(指向) <首地址>,因为有一个字符,所以判断为真,判断完后,执行target
,指针位置加一,此时target →(指向) <第二个元素地址> - 进入循环体。
- 循环体内length加一。
第二次循环:
- 根据先使用后自增的原则,执行判断语句时,指针指向第二个元素'\n'(前面提到,fgets函数会把回车也读进来),判断为真,然后指针加一,进入循环体。
- 循环体结束后,length = 2。
第三次循环:
- 此时指针指向'\0',判断为假,不执行循环体,打印结果。由于多计算了'\n',因此在printf的时候要减去。