首页 > 解决方案 > 在指针数组中打印指针指向的值

问题描述

  1. 我正在尝试打印存储在 ptr 数组中的指针所指向的值。预期输出为 1,2,3,4,但该函数会打印垃圾。
  2. 试图了解如何访问数组中的值并打印它们。

我知道有一种简单的方法可以只使用双指针指向数组并打印,但为了学习,尽量不要使用双指针而只使用指向整个数组的指针

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

uint8_t a = 1;
uint8_t b = 2;
uint8_t c = 3;
uint8_t d = 4;

uint8_t *ptr[] = {&a, &b, &c ,&d}; //Pointer is array of 4 pointer to uint8_t 


void foo(uint8_t* (*ptr)[4]) //Ptr is pointer to array of 4 pointer to uint8_t
{
    uint8_t * temp =(uint8_t*)ptr[0];
    for(uint8_t i=0;i<4;i++){
        
        printf("%d\n",*(temp+i)); //Does not print 1,2,3,4 as expected
    }
}

int main()
{
  
    foo(&ptr);
    return 0;
}

标签: cpointers

解决方案


您的代码似乎不必要地复杂,但我想您可以在下面做。

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

uint8_t a = 1;
uint8_t c = 3;
uint8_t b = 2;
uint8_t d = 4;

uint8_t *ptr[] = {&a, &b, &c ,&d};  


void foo(uint8_t* (*ptr)[4])  
{
    uint8_t ** temp =(uint8_t**)*ptr; 
    for(uint8_t i=0;i<4;i++){
     
        printf("%d\n",**(temp+i)); 
    }
}

int main()
{
  
    foo(&ptr);
    return 0;
}
    

推荐阅读