C++ 递增指针打印垃圾?
我编写了以下代码:C++ 递增指针打印垃圾?,c++,c,pointers,C++,C,Pointers,我编写了以下代码: void incrementNumber(int *num) { *num++; printf("%i\n", *num); } int main() { int i = 3; printf("%i\n", i); int *ptr = &i; incrementNumber(&i); printf("%i\n", i); getchar(); getchar(); re
void incrementNumber(int *num)
{
*num++;
printf("%i\n", *num);
}
int main()
{
int i = 3;
printf("%i\n", i);
int *ptr = &i;
incrementNumber(&i);
printf("%i\n", i);
getchar();
getchar();
return 0;
}
每当我以增量数字输出num时,它只打印垃圾,但是如果我将代码更改为:
void incrementNumber(int *num)
{
*num += 1;
printf("%i\n", *num);
}
它按预期输出值。我试图避免使用引用,以便更好地理解指针,因为(像大多数人一样)我对指针的知识相当有限,所以我试图更好地掌握它们
让我重新表述一下这个问题,我知道它为什么会输出那个垃圾值,因为它会增加内存地址并在那个位置打印垃圾,而不是增加内存地址中包含的值,我想我要问的是,为什么它会在增量上这样做,而不是添加到?这就是这两个命令编译到汇编的方式吗?有没有办法以这种方式增加指针指向的值?我很高兴您了解这一行中发生的情况:
*num++;
问题在于运营商的优先级。我认为“++”比“*”优先(当然,在这种情况下)。试着写下这个,它会按照你想要的方式工作:
(*num)++;
有一件事我不知道,而且刚刚学到的是,在这个上下文中指针操作的优先级高于+=。这是因为优先级:
*num++
计算为num++
,然后取消引用。下一步打印值时,它来自本例中的无效指针
如果你使用
(*num)+
,你会得到你想要的结果。优先级:*(num++)
和(*num)+
之间有区别。您得到垃圾是因为您编写了与第一个代码等价的代码,但可能打算使用第二个。想想原型strcpy()
循环:while((*dst++=*src++)!='\0')代码>-这是怎么回事?为什么一个单指针教程没有提到我不知道,但你太棒了,我现在觉得很愚蠢,谢谢!此行:*num++代码>有优先级问题。建议使用:(*num)+代码>发布的代码没有干净地编译。编译器引发消息:`warning:unused variable'ptr'[-Wunused variable]它可以工作!这是有道理的,我想只是说“*num++”是一件模棱两可的事情,所以这很有道理。干杯