C语言中如何改变指针的地址

如果你想要在函数内部改变指针的地址,而不是改变指针指向的变量的值,你可以传递指针的指针(即二级指针)给函数。这样,你就可以在函数内部修改指针的地址,从而改变指针指向的变量。以下是一个示例:


#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。这个修改在函数外部也是可见的。

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/133529526
今日推荐