#include <stdio.h>
void circle(int *,int *,int *);
int main() {
int x,y,z;
printf("please enter 3 numbers = ");
scanf("%d %d %d",&x,&y,&z);
circle(&x,&y,&z);
printf("x=%d y=%d z=%d",x,y,z);
}
void circle(int *a,int *b ,int *c) {
int *d;
d=*a;
*a=*b;
*b=*c;
*c=d;
}
上面的代码用于使用函数循环交换x, y, z
的值。
在上面的代码中,我使用*d
或d
是一个unsigned
整数,即使在
d=*a
如果x
(或a
)= -1
,那么代码也可以工作。
答案 0 :(得分:1)
void circle(int *a, int *b, int *c) {
int *d;
d = *a;
...
此处d = *a;
将int
放入指针。
体面的编译器应发出警告,例如:
'=': 'int *' differs in levels of indirection from 'int'
由于int
的大小通常小于或等于指针的大小,因此您的代码仍然可以工作,但是它是未定义的行为,因此可能无法在其他平台上工作。未定义的行为包括“正常工作”。
答案 1 :(得分:0)
如果您想知道为什么将负值赋给无符号整数时程序仍然可以工作,那么应该知道在此链接上为负值赋无符号整数时会发生什么:
What happens if I assign a negative value to an unsigned variable?