silverviolet 发表于 2021-1-30 14:55

结构体数组地址作为函数参数输出的困惑

   结构体数组A内有几个结构,想通过函数以指针的形式作为参数传递给另一个结构体B数组,但是输出的只有结构体数组A的第一个结构体,后面的nana,nana,nana的成员没输出
   以下为程序:
   #include <iostream>
using namespace std;
struct student {
int score;
int age;
}*ssss;
static student* nana;
int neo(student* qqqq)
{   int i;
    for (i = 0; i < 4; i++)
    {if (!nana)
      {   cout << " nana[" << i << "] = " << nana << endl;
            nana = qqqq;
            cout << " nana[ " << i <<" ] =" <<nana->score << endl;
            cout << " nana[ " << i <<" ] ="<< nana->age << endl;
            return i;
         }
    };
            return -1;
};

using namespace std;
static int i;

int main()
{
    student aa = { {1,2},{3,4},{5,6},{7,8} };
    neo(aa);
    return 0;
}

古月不傲 发表于 2021-1-30 15:13

本帖最后由 古月不傲 于 2021-1-30 15:16 编辑

#include <iostream>

using namespace std;

struct student {
      int score;
      int age;
}*ssss;

static student* nana;

int neo(student* qqqq)
{   
      int i;
      for (i = 0; i < 4; i++)
      {
                if (!nana)
                {
                        cout << " nana[" << i << "] = " << nana << endl;
                        nana = qqqq;
                        cout << " nana[ " << i <<" ] =" <<nana->score << endl;
                        cout << " nana[ " << i <<" ] ="<< nana->age << endl;
                        qqqq++;
                }
      };
      return 0;
};

int main()
{
      student aa = { {1,2},{3,4},{5,6},{7,8} };
      neo(aa);
      return 0;
}

return的含义都忘了吗?

silverviolet 发表于 2021-1-30 15:25

古月不傲 发表于 2021-1-30 15:13
#include

using namespace std;


嗯 ,请赐教,这个确实不懂

古月不傲 发表于 2021-1-30 15:30

silverviolet 发表于 2021-1-30 15:25
嗯 ,请赐教,这个确实不懂

return 代表函数结束了,neo(aa)继续往下执行

古月不傲 发表于 2021-1-30 15:45

silverviolet 发表于 2021-1-30 15:25
嗯 ,请赐教,这个确实不懂

链接: https://pan.baidu.com/s/1nFk6eVT1JnBOH-ot9LpQ_g密码: 891s
录制了一个视频,你自己看下

无闻无问 发表于 2021-1-30 16:34

碰到return,函数结束返回,只执行一次函数就结束了,肯定只打印一个

silverviolet 发表于 2021-1-30 20:08

本帖最后由 silverviolet 于 2021-1-30 20:12 编辑

古月不傲 发表于 2021-1-30 15:45
链接: https://pan.baidu.com/s/1nFk6eVT1JnBOH-ot9LpQ_g密码: 891s
录制了一个视频,你自己看下
       谢谢您的指导,对于结构体数组for语句循环体外添加return i才能把循环体内循环完毕,明白了,如果是结构体不是以数组方式存入那么就可以在for的大括号内循环了。
       还有个就是结构体的指针qqqq++也很重要,这个是我没想到过的,只是我很困惑 对于下面这段if(!p_array_lcd_controller)括号内的参数,p_array_lcd_controller是结构体指针数组地址吧,那!p_array_lcd_controller的意思是什么呢?
#define LCD_CONTROLLER_NUM 10

static p_lcd_controller p_array_lcd_controller;
static p_lcd_controller g_p_lcd_controller_selected;

int register_lcd_controller(p_lcd_controller plcdcon)
{
        int i;
        for (i = 0; i < LCD_CONTROLLER_NUM; i++)
        {
                if (!p_array_lcd_controller)
                {
                        p_array_lcd_controller = plcdcon;
                        return i;
                }
        }
        return -1;               
}




古月不傲 发表于 2021-1-31 00:25

本帖最后由 古月不傲 于 2021-1-31 00:42 编辑

silverviolet 发表于 2021-1-30 20:08
谢谢您的指导,对于结构体数组for语句循环体外添加return i才能把循环体内循环完毕,明白了,如果 ...
这个和上面的一样,是个指针数组,判断的还是里面的指针要为空的(说是空的,其实静态默认初始化为0,0取反条件就成立),才把指针赋值给它

silverviolet 发表于 2021-1-31 23:17

古月不傲 发表于 2021-1-31 00:25
这个和上面的一样,是个指针数组,判断的还是里面的指针要为空的(说是空的,其实静态默认初始化为0,0取 ...
       是不是说p_array_lcd_controller数组指针这个的地址的内容其实就是0,因为没有初始化,然后前面的!取反就是这个地址的内容!0就是真的,我把数组指针的地址和指针的地址上的内容输进去,发现好像只有地址上的内容为0能解释的痛,不然判断指针是否=0有点奇怪。

古月不傲 发表于 2021-1-31 23:48

本帖最后由 古月不傲 于 2021-1-31 23:57 编辑

silverviolet 发表于 2021-1-31 23:17
是不是说p_array_lcd_controller数组指针这个的地址的内容其实就是0,因为没有初始化,然后前面的 ...
判断的是指针是否为0,还是模模糊糊的话,说明你并不理解,请善用VS的调试技巧,需要不断的测试,才是你心中的结果。
页: [1] 2
查看完整版本: 结构体数组地址作为函数参数输出的困惑