指针的增量是否与整数的增量不同?
Does increment in pointer not same as that of integer?
考虑下面的代码:
void increment(int* a)
{
printf("%d\n",a);
*a=*a+1;
}
int main()
{
int a=10;
int* p=&a;
increment(&a);
printf("%d",a);
return 0;
}
这会将 a 递增为 11 但是这 :
void increment(int* a)
{
printf("%d\n",a);
*a++;
}
int main()
{
int a=10;
int* p=&a;
increment(&a);
printf("%d",a);
return 0;
}
以上代码生成的值为 10。
指针运算不像整数运算还是我在这里遗漏了什么??
您缺少操作员优先级。 (*a)++;
与 *a++
完全不同。
第一个递增地址 a
的值,第二个 post 递增 a
并获取原始地址的值。
语句printf("%d\n",a);
不打印a
指向的整数的值。如所写,它调用未定义的行为。
printf("%p\n", (void*)a);
会打印指针的值,即整型变量的地址。
printf("%d\n", *a);
将打印整数的值。
此外,*a=*a+1;
与*a++;
不同。由于运算符优先级规则,*a++
被解析为 *(a++)
,指针递增,而不是指向的值。您可以将 ++*a;
用作 *a = *a + 1;
的 shorthand,其他变体也是可能的:++a[0]
、a[0]++
、(*a)++
,但首选解决方案是:
*a += 1;
考虑下面的代码:
void increment(int* a)
{
printf("%d\n",a);
*a=*a+1;
}
int main()
{
int a=10;
int* p=&a;
increment(&a);
printf("%d",a);
return 0;
}
这会将 a 递增为 11 但是这 :
void increment(int* a)
{
printf("%d\n",a);
*a++;
}
int main()
{
int a=10;
int* p=&a;
increment(&a);
printf("%d",a);
return 0;
}
以上代码生成的值为 10。
指针运算不像整数运算还是我在这里遗漏了什么??
您缺少操作员优先级。 (*a)++;
与 *a++
完全不同。
第一个递增地址 a
的值,第二个 post 递增 a
并获取原始地址的值。
语句printf("%d\n",a);
不打印a
指向的整数的值。如所写,它调用未定义的行为。
printf("%p\n", (void*)a);
会打印指针的值,即整型变量的地址。
printf("%d\n", *a);
将打印整数的值。
此外,*a=*a+1;
与*a++;
不同。由于运算符优先级规则,*a++
被解析为 *(a++)
,指针递增,而不是指向的值。您可以将 ++*a;
用作 *a = *a + 1;
的 shorthand,其他变体也是可能的:++a[0]
、a[0]++
、(*a)++
,但首选解决方案是:
*a += 1;