我写了以下代码:
每当我在递增数字时输出num,它只打印出垃圾值。但是,如果我将代码更改为以下内容:
它按预期输出值。我正在尽量避免使用引用,以便更好地理解指针,因为(像大多数人一样)我对指针的了解相当有限,所以我正努力掌握它们。同时,让我重新表述问题,我知道为什么会输出垃圾值,那是因为它在增加内存地址并打印该位置的垃圾值,而不是增加内存地址中包含的值,我猜我想问的是,为什么它会在增量上执行此操作,但不是在加法上执行?这只是两个命令编译成汇编的方式吗?是否有一种方法可以以这种方式递增指针所指向的值?
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)++
之间有区别。由于您编写的代码等同于第一个,但可能意图使用第二个,因此会得到垃圾值。想想原型strcpy()
循环:while ((*dst++ = *src++) != '\0') ;
— 它是做什么的? - Jonathan Leffler