如果你想要在函数内部改变指针的地址,而不是改变指针指向的变量的值,你可以传递指针的指针(即二级指针)给函数。这样,你就可以在函数内部修改指针的地址,从而改变指针指向的变量。以下是一个示例:
#include <stdio.h>
// 函数原型,接受一个指针的指针作为参数
void changePointer(int **ptrPtr) {
int newNumber = 42;
// 修改指针的地址,使其指向新的变量
*ptrPtr = &newNumber;
}
int main() {
int number = 10;
int *ptr = &number;
printf("Before function call: %d\n", *ptr);
// 将指针的地址传递给函数,并在函数内部修改指针的地址
changePointer(&ptr);
printf("After function call: %d\n", *ptr); // 输出 42
return 0;
}
在这个例子中,`changePointer` 函数接受一个指针的指针作为参数。在函数内部,它创建了一个新的整数变量 `newNumber`,然后将该变量的地址赋给了传入的指针 `*ptrPtr`。这样,`ptr` 在 `main` 函数中的地址被修改为 `newNumber` 的地址。因此,`*ptr` 现在指向了 `newNumber`,并且在函数外部也能够访问到这个值。请注意,`newNumber` 的生命周期在 `changePointer` 函数结束时结束,所以在实际应用中需要小心处理生命周期问题。
你可以运行一下下面的代码,相信你会有新的收获
#include "stdio.h"
struct Stud{ //定义结构体类型
int no;
char name[10];
struct Stud *next;
};
void fun(struct Stud *s) //一个修改结构体地址的函数
{
s=s->next;
}
int main(){ //主函数
struct Stud s[2]={
{1,"Mary"},{2,"Smith"}}; //初始化
s[0].next=&s[1];
fun(&s[0]); //进入函数
for(int i=0;i<2;i++){ //打印
printf("%s(%d)",s[i].name,s[i].no);
}
printf("\n");
}
在C语言中,如果你想通过函数改变一个变量的值,你可以传递该变量的地址(指针)给函数,然后在函数内部通过该指针修改变量的值。这样,你就可以在函数外部看到变量的修改。以下是一个示例:
#include <stdio.h>
// 函数原型,接受一个指针作为参数
void changeValue(int *ptr) {
// 通过指针修改变量的值
*ptr = 42;
}int main() {
int number = 10;printf("Before function call: %d\n", number);
// 将变量的地址传递给函数
changeValue(&number);printf("After function call: %d\n", number); // 输出 42
return 0;
}
在上面的例子中,`changeValue` 函数接受一个整数指针作为参数,然后通过该指针修改变量的值。在 `main` 函数中,我们声明一个整数变量 `number`,然后将它的地址传递给 `changeValue` 函数。在函数内部,通过指针 `*ptr` 修改了 `number` 的值为 42。这个修改在函数外部也是可见的。