我无法理解输出是什么
int main( ) {
int x = 5, y = 10, z = 20;
int *ptr1 = &x, *ptr2 = &y, *ptr3 = &z;
*ptr2 = *ptr3 + *ptr1;
ptr2 = ptr1;
*ptr2 = *ptr3;
printf("%d and %d and %d\n", x,y,z);
/*char str[] = "Stackoverflow is kind.";
int len = strlen(str);
printf("%s and %d\n", str, len);
char *p;
p = str;
printf("%c and %c and %c and %c\n",
*p, str[3], *(p+9), str[len-2]);*/
return 0;
}
第一条添加线是否会被允许?我以为你无法添加指针。这两行之间会有什么区别?
ptr2 = ptr1;
*ptr2 = *ptr3;
显然它们是不同的指针,但它们的功能有何不同?
我已经运行了该计划并获得了20 25 20但我不明白如何
答案 0 :(得分:2)
在这里,您可以将x y和z的地址分配给这三个指针:
int *ptr1 = &x, *ptr2 = &y, *ptr3 = &z;
所以你基本上将值1和3加在一起:
*ptr2 = *ptr3 + *ptr1;
*ptr2 = 20 + 5 -> 25
然后,你让ptr2指向与ptr1相同的地址,所以它们都指向相同的值,即5:
ptr2 = ptr1;
最后,你将ptr2指向的值更改为ptr3指向的值,使其变为20.但请记住ptr2和ptr1指向同一地址,因此ptr1和ptr2的值现在为20:
*ptr2 = *ptr3;
答案 1 :(得分:1)
执行行
后int x = 5, y = 10, z = 20;
int *ptr1 = &x, *ptr2 = &y, *ptr3 = &z;
以下条件属实:
ptr1 == &x
*ptr1 == x == 5
ptr2 == &y
*ptr2 == y == 10
ptr3 == &z
*ptr3 == z == 20
因此,表达式 *ptr1
与表达式 x
相同,*ptr2
与{{1}相同所以行
y
没有添加指针值,它正在添加指针指向的对象的值 - IOW,这相当于写
*ptr2 = *ptr3 + *ptr1;
在第
行y = x + z;
您将ptr2 = ptr1;
设置为与ptr2
相同的值,这意味着它会将同一个对象指向ptr1
。在此行之后,以下条件都是正确的:
ptr1
最后,行
ptr2 == ptr1 == &x
*ptr2 == *ptr1 == x == 10
将*ptr2 = *ptr3;
指向的对象(ptr2
)的值设置为x
指向的对象的值(ptr3
); IOW,这相当于写作
z
所以,在整个计划过程中:
x = z;
因此你的输出。
答案 2 :(得分:0)
在这一行:
*ptr2 = *ptr3 + *ptr1;
您没有添加指针。您正在添加指针指向的内容。在这种情况下,它与y = z + x
相同。
ptr2
是int *
类型的指针,而*ptr2
的类型为int
。