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)
这是因为您在GetPointer1(uint8_t*p)的函数签名中的指针是按值传递的.如果要修改指针本身,则必须将指针传递给指针:
void GetPointer1(uint8_t **p) {
*p = &SrcArray[0][0];
}
Run Code Online (Sandbox Code Playgroud)
否则,您可以修改指针指向的片段内存,但不能修改指针本身.
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |