为什么不能获得正确的结构指针值?

时间:2019-11-18 11:06:14

标签: c arrays pointers implicit-conversion dereference

我想在函数中使用ptr [1]-> ReadLength,但它始终显示0。

解决此问题的方法是什么?

谢谢。

struct cache_read_block
{
    unsigned short ReadLength;    // How many words
};
typedef struct cache_read_block CACHE_READ_BLOCK;

void getValue(CACHE_READ_BLOCK (*ptr)[100])
{
    printf("index %d\n", ptr[0]->ReadLength);
    printf("index %d\n", ptr[1]->ReadLength);
}

int main(void) {

CACHE_READ_BLOCK arr[100] = {0};

 arr[0].ReadLength = 10;
 arr[1].ReadLength = 5;

 getValue(&arr);

 system("pause");
 return 0;
}

3 个答案:

答案 0 :(得分:4)

此功能

void getValue(CACHE_READ_BLOCK (*ptr)[100])
{
    printf("index %d\n", ptr[0]->ReadLength);
    printf("index %d\n", ptr[1]->ReadLength);
}

parametr是指向类型为CACHE_READ_BLOCK的100个元素的数组的指针。您必须首先取消引用指针。

void getValue(CACHE_READ_BLOCK (*ptr)[100])
{
    printf("index %d\n", ( *ptr )[0].ReadLength);
    printf("index %d\n", ( *ptr )[1].ReadLength);
}

通过以下方式声明和定义函数会更简单

void getValue( CACHE_READ_BLOCK *ptr )
{
    printf("index %d\n", ptr[0].ReadLength);
    printf("index %d\n", ptr[1].ReadLength);
}

并称呼它

getValue( arr );

用作函数参数的数组将隐式转换为指向其第一个元素的指针。

或者由于数组的元素未更改,因此参数应具有限定符const

void getValue( const vCACHE_READ_BLOCK *ptr )
{
    printf("index %d\n", ptr[0].ReadLength);
    printf("index %d\n", ptr[1].ReadLength);
}

答案 1 :(得分:-1)

尝试一下:

void getValue(CACHE_READ_BLOCK (*ptr)[100])
{
    printf("index %d\n", (*ptr)[0].ReadLength);
    printf("index %d\n", (*ptr)[1].ReadLength);
}

答案 2 :(得分:-1)

struct cache_read_block
{
    unsigned short ReadLength;    // How many words
};
typedef struct cache_read_block CACHE_READ_BLOCK;

void getValue(CACHE_READ_BLOCK *ptr)
{
    printf("index %d\n", ptr[0].ReadLength);
    printf("index %d\n", ptr[1].ReadLength);
}

int main(void) {

CACHE_READ_BLOCK arr[100] = {0};

 arr[0].ReadLength = 10;
 arr[1].ReadLength = 5;

 getValue(&arr);

 system("pause");
 return 0;
}