Cómo cambiar la dirección del puntero en lenguaje C

Si desea cambiar la dirección de un puntero dentro de una función , en lugar de cambiar el valor de la variable a la que apunta el puntero, puede pasar un puntero al puntero (es decir, un puntero secundario) a la función. De esta manera, puede modificar la dirección del puntero dentro de la función, cambiando así la variable apuntada por el puntero. Aquí hay un ejemplo:


#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;
}

En este ejemplo, la función `changePointer` acepta un puntero a un puntero como argumento. Dentro de la función, crea una nueva variable entera `newNumber` y luego asigna la dirección de la variable al puntero pasado `*ptrPtr`. De esta forma, la dirección de `ptr` en la función `main` se modifica a la dirección de `newNumber`. Por lo tanto, `*ptr` ahora apunta a `newNumber` y se puede acceder a este valor fuera de la función. Tenga en cuenta que el ciclo de vida de "newNumber" finaliza cuando finaliza la función "changePointer", por lo que los problemas del ciclo de vida deben manejarse con cuidado en aplicaciones prácticas.

Puede ejecutar el siguiente código y creo que obtendrá nuevos conocimientos.

#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");
}

En lenguaje C, si desea cambiar el valor de una variable a través de una función, puede pasar la dirección (puntero) de la variable a la función y luego modificar el valor de la variable a través del puntero dentro de la función. De esta forma, puedes ver la modificación de la variable fuera de la función. Aquí hay un ejemplo:

#incluir <stdio.h>

// Prototipo de función, acepta un puntero como parámetro
void changeValue(int *ptr) {     // Modifica el valor de la variable mediante el puntero     *ptr = 42; }


int principal() {     int número = 10;

    printf("Antes de la llamada a la función: %d\n", número);

    // Pasa la dirección de la variable a la función
    changeValue(&number);

    printf("Después de la llamada a la función: %d\n", número); // Salida 42

    devolver 0;
}

En el ejemplo anterior, la función `changeValue` acepta un puntero entero como parámetro y luego modifica el valor de la variable a través del puntero. En la función `principal`, declaramos una variable entera `número` y luego pasamos su dirección a la función `cambiarValor`. Dentro de la función, el valor de `number` se modifica a 42 mediante el puntero `*ptr`. Esta modificación también es visible fuera de la función.

Supongo que te gusta

Origin blog.csdn.net/qq_50942093/article/details/133529526
Recomendado
Clasificación