为什么我不能将指针作为参数传递?

bit*_*ack 2 c pointers function multidimensional-array

我试图通过c中的函数检索指针.如果指针是函数的返回值,则它可以工作.但是如果我将指针的地址传递给函数,我就无法从函数内更新解除引用的指针值(应该是存储在指针中的地址).

请参阅代码和输出.为什么我没有拿到既相同的结果GetPointer1()GetPointer2()?我错过了什么?

#include <stdio.h>
#include <stdint.h>

uint8_t SrcArray[2][3] = {{11,12,13},{21,22,23}};
uint8_t *p1;
uint8_t *p2;

void GetPointer1(uint8_t *p);
uint8_t* GetPointer2(void);

int main()
{
    printf ("&SrcArray[0][0]: %d\n", &SrcArray[0][0]);

    GetPointer1(p1);
    p2 = GetPointer2();

    printf ("p1: %d\n",p1);
    printf ("p2: %d\n",p2);

    return 0;
}

void GetPointer1(uint8_t *p)
{
    p = &SrcArray[0][0];
}

uint8_t* GetPointer2(void)
{
    return &SrcArray[0][0];
}
Run Code Online (Sandbox Code Playgroud)

输出:

&SrcArray[0][0]: 6295604
p1: 0
p2: 6295604
Run Code Online (Sandbox Code Playgroud)

IGa*_*ldI 7

这是因为您在GetPointer1(uint8_t*p)的函数签名中的指针是按值传递的.如果要修改指针本身,则必须将指针传递给指针:

void GetPointer1(uint8_t **p) {
    *p = &SrcArray[0][0];
}
Run Code Online (Sandbox Code Playgroud)

否则,您可以修改指针指向的片段内存,但不能修改指针本身.