c - 结构数组指针

标签 c loops pointers struct

好的,我有这个代码:

#include <stdio.h>
#include <stdlib.h>

#define ARR_SIZE 5

struct mys
{
    double first;
    unsigned long second;
    char str[10];
};

int main(int argc, char** argv)
{
    size_t i = 0;
    struct mys thes[ARR_SIZE] = 
        {
            {1.1, 1, "First"},
            {2.2, 2, "Second"},
            {3.3, 3, "Third"},
            {4.4, 4, "Fourth"},
            {5.5, 5, "Fifth"}
        };//load array of structures with values

    for (; i < ARR_SIZE; ++i)
        fprintf(stdout, "second->%lu\n", thes[i].second);//loop through array thes and print element second

    return (EXIT_SUCCESS);
}

现在,我想获取第 0 个元素 thes 中名为 second 的元素的地址,然后使用它遍历数组 thes 并打印每个第二个元素。

#include <stdio.h>
#include <stdlib.h>

#define ARR_SIZE 5

struct mys
{
    double first;
    unsigned long second;
    char str[10];
};

int main(int argc, char** argv)
{
    size_t i = 0;
    unsigned long * ptr = NULL;//pointer to unsigned long
    struct mys thes[ARR_SIZE] = 
        {
            {1.1, 1, "First"},
            {2.2, 2, "Second"},
            {3.3, 3, "Third"},
            {4.4, 4, "Fourth"},
            {5.5, 5, "Fifth"}
        };

    //first loop
    for (; i < ARR_SIZE; ++i)
        fprintf(stdout, "second->%lu\n", thes[i].second);

    ptr = &thes[0].second;//get the address of the second element of the zero'th array structure and store it in ptr

    // Now I want to use the above pointer ptr to loop through the array thes and display the second element like I did above, but I can't manage to do that.
    //The output of this loop should be the same as the first loop 

    return (EXIT_SUCCESS);
}

所以,我已经实现了指针,但是我在为第二个循环编写代码时遇到了问题。感谢您的帮助。

最佳答案

for (; i < ARR_SIZE; ++i)
    fprintf(stdout, "second->%lu\n", *( unsigned long * )(( char * )ptr + i * sizeof( struct mys ) ));

关于c - 结构数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20654851/

相关文章:

java - Java声音剪辑循环帧位置

c++ - C++调试中的指针

c - 将 "falign-functions"编译器标志显式设置为特定值的动机是什么?

c - gtk_entry_set_activates_default 没有发挥它的魔力

arrays - 如何遍历 n 个维度?

sql-server - 在 SQL Server 2008 中执行 while 循环

c++ - "Request for member which is of non-class type", 赋值语句不正确?

c - 理解指针

c - fork() 之后 execv() 的 Echo 问题

c - sprintf中的pcmC%iD%ip参数