C中的指针与指针对指针

C中的指针与指针对指针,c,pointers,C,Pointers,我有点困惑,所以我将从解释我的理解开始,希望有人能纠正我,解释我错在哪里。在C语言中,参数是通过值传递的,因此如果我们想在传递给它的函数中更改指针,我们必须将参数定义为指向指针的指针,这样我们就可以修改实际指针而不是值。如果这是正确的,有人能解释一下sprintf()函数是如何改变*str指针的吗?sprintf函数不会改变*str指针,它会改变*str指针指向的数据 例如: char *str = malloc(20); sprintf(str, "hello %s", "world"); /

我有点困惑,所以我将从解释我的理解开始,希望有人能纠正我,解释我错在哪里。在C语言中,参数是通过值传递的,因此如果我们想在传递给它的函数中更改指针,我们必须将参数定义为指向指针的指针,这样我们就可以修改实际指针而不是值。如果这是正确的,有人能解释一下sprintf()函数是如何改变*str指针的吗?

sprintf函数不会改变
*str
指针,它会改变
*str
指针指向的数据

例如:

char *str = malloc(20);
sprintf(str, "hello %s", "world");
// str has not changed, only the data it points to has

sprintf
函数不会更改
*str
指针,它会更改
*str
指针指向的数据

例如:

char *str = malloc(20);
sprintf(str, "hello %s", "world");
// str has not changed, only the data it points to has

你能详细说明一下吗?谢谢:)如果*str指针更改,那么*str指针将指向不同的地方。它仍然指向相同的位置,只是该位置的数据已更改。例如,指针就像房屋的地址,数据就像房屋里的人。sprintf就像是在替换房子里的人。你能详细说明一下吗?谢谢:)如果*str指针更改,那么*str指针将指向不同的地方。它仍然指向相同的位置,只是该位置的数据已更改。例如,指针就像房屋的地址,数据就像房屋里的人。sprintf就像替换房子里的人一样,“双指针”包含双指针的地址。指向指针的指针包含指针的地址。谢谢,更正:-)“双指针”包含双指针的地址。指向指针的指针包含指针的地址。谢谢,更正:-)