如果您要更改 y 指向的内容,则需要一个指向指针的指针,例如:-
static int blah = 42;
void func1(int **z)
{
(*z) = &blah;
printf("z=%d\n", *(*z));
}
int _tmain(int argc, _TCHAR* argv[])
{
int x = 100;
int *y = &x;
printf("y=%d\n", *y);
func1(&y);
// y does not point to x anymore;
printf("y=%d\n", *y);
return 0;
}
在您的原始文件中,您正在更改 x,在此您将单独留下 x 并更改指针 y。
通常,您不会经常使用这些(您会不时使用它们),但更一般地说,指向指针的指针是一种更有趣的类型。
所以...
typedef struct
{
int *y;
} Z;
void f(Z *z)
{
z->y = &blah;
}
void main()
{
int x;
Z a;
a->y = &x;
f(&a);
}
所以这实际上是同一件事,但是现在您使用结构来保存指针,并且您将结构的指针作为“指向指针的指针”传递,但现在它是指向包含指向指针的结构的指针一个整数。
但是你命名的东西更有趣一点:-
typedef struct
{
char *name;
} Person;
static char* default_name = "blah";
void set_default_name_of_person(Person* person)
{
person->name = default_name;
}
void main()
{
Person person;
set_default_name_of_person(&person);
}
现在您的代码开始看起来像您实际编写的内容。(除了这有点人为的例子)