双指针 **src 和操作 (*(*src)++ = reg_offset)

  • 本文关键字:src reg offset 操作 指针 c++ c
  • 更新时间 :
  • 英文 :


我在 C/C++ 中较新,我真的很困惑执行复杂操作的函数。我只想知道它是如何工作的?函数是什么意思?

void writetoXX(unsigned int **src, unsigned int reg_offset, unsigned int reg_data){
*(*src)++ = reg_offset;
*(*src)++ = reg_data;
}

知道吗??

更新我的理解:

void writetoXX(unsigned int **src, unsigned int reg_offset, unsigned int reg_data) {
*(*src)++ = reg_offset;
*(*src)++ = reg_data;
}
int main() {
int a[10] = { 0 };
int *p = a;
printf("Before !!n");
for(int i=0;i<10;i++)
printf("%d ", a[i]);
writetoXX(&p, 20, 30);
printf("After !!! n");
for (int i = 0; i<10; i++)
printf("%d ", a[i]);
getchar();
return 0;
}

运行此程序后,我看到函数 writetoXX 将值 arr[0][0] 和 arr[0][1] 更改为 20 和 30。这意味着该函数用于将数据写入 2 个连续块。

输出如下:

Before !!
0 0 0 0 0 0 0 0 0 0
After !!
20 30 0 0 0 0 0 0 0 0

src是指向unsigned int的指针,例如用于二维数组。由于运算符优先级,例程执行以下操作:

  • *src,它是一个指向unsigned int的指针
  • (*src)++递增指针,使其指向下一个unsigned int。这是一个后置增量,因此它返回增量之前的值。
  • *(*src)++*src在递增之前所指向的unsigned int++

所以综上所述,你取* src哪个是指向unsigned int的指针,你将第一个指向的数据分配给reg_offset,然后你递增这样的指针,然后你把下一个元素分配给reg_data,最后你再次递增指针*src

双指针是一个变量,用于存储另一个指针变量的地址。

考虑一下这个*(*src)++ = reg_offset;

在一行中:reg_offset的值存储在存储在src中的当前地址,src中的地址递增。

您可以按以下顺序考虑这种情况。 1)如您所知src是一个变量,用于存储另一个指针或内存空间的地址。

2)所以(*src)给出指向变量或内存空间的地址。

3) 由于运算符优先级,发生(*src)++。您可以像执行当前行后,增加存储在src中的地址值

4)现在*(*src)哪个是存储在(*src)中的地址的内存空间。因此*(*src) = reg_offset;会将reg_offset的值复制到该地址。为了清楚起见,我删除了这一行中的++

5)当第二行*(*src)++ = reg_data;即将执行时,(*src)将指向下一个地址。所以reg_data被写入下一个地址。

请注意,next address并不意味着current_address+1。它实际上意味着current_address+sizeof(data type).如果编译器中的unsigned int为 4 个字节,则next_address = current_address+4

您可以在行之间打印(*src)的内容并进行验证。

最新更新