登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看2110|回7|收藏
楼主 ID:379586 只看他
2018-8-1 19:37
  typedef struct NN  tt;
  typedef struct NN
  {
          u8 a,b,c,d,e,g,h;         

  }tt;

tt   aa[6]={10,25,34,4,5,88,75};
tt   L;
printf("%d \n",L.a);
为什么此时输出的是乱码  怎么改是才能对成员幅值
/************************/
   typedef struct NN
  {
          u8 a,b,c,d,e,g,h;         

  }aa[1]={{10,25,34,4,5,88,75}};
这种方式对结构体成员幅值问题再哪里
/*************************/
   typedef struct NN
  {
          u8 a,b,c,d,e,g,h;         

  }tt;

   tt aa[]={10,25,34,4,5,88,75};
   tt *L=aa;
  printf("%d \n",L->c);
为什么这种方式对结构体成员进行了赋值





沙发 ID:380285 只看他
2018-8-1 23:45
我刚学C没几天,也是对结构体、指针有点弄不清楚。试着说一下:第一个不用再定义tt  L;  直接下一句:printf{"%d\n",aa->a}就可以了。我生硬地理解为:用 “->”的前面是指结构体的首地址,而“.”的前面指的是结构体的首地址对应的数据组名,不知道这样解释对不对,跟地址指针有点类似。像tt  *L=aa;表示的是指针指向的内存L地址所装载的具体数值,L是地址,aa是地址中的实际数值。其实是L=& aa;
板凳 ID:330301 只看他
2018-8-2 15:38
第一个错误写法:tt   aa[6]={10,25,34,4,5,88,75}; //tt其实就是struct NN,这种表达的意思是定义了aa[0]-aa[5]共6个struct NN,所以后面的赋值要写成{{10,25,34,4,5,88,75},{0},{0},{0},{0},{0}}。
第二个错误写法:理解了typedef的意思就知道为什么了。
第三个写法是因为aa[]数组的首地址与第一个元素的地址是一样的,除了算数组大小和长度要注意外,其他的引用都可以认为这两个是一样的地址意义,而且数组未指定具体元素数量,你赋了一组结构体的数,自动认为就一个数组元素。
地板 ID:382191 只看他
2018-8-2 15:46
建议看下书本  这个多用就记住了 鱼与渔
5# ID:382189 只看他
2018-8-2 16:15
tt   aa[6]={10,25,34,4,5,88,75};
tt aa[6];这个首先声明的是一个结构体数组,里面的每个元素都是一个结构体。
在初始化的时候要写成这样
tt aa[6]={{1,2,3,4,5,6,7},{1,2,3,4,5,6,7}...};
类似于这样初始化
在输出的时候  要
aa[0].a  aa[0].b... 对应的是结构体数组中第一个结构体的对应元素
6# ID:382189 只看他
2018-8-2 16:17
初始化和打印可以参考这个

typedef struct student {
        int a;
        int b;
}stu;
int main()
{
        stu s[3]={{1,2},{3,4},{5,6}};
        printf("%d %d\n",s[0].a,s[0].b);
        return 0;
}
7# ID:379586 只看他
2018-8-2 19:59
在问一下二楼
tt *L=aa;  这里L除了指向数组首地址为什么还指向结构体的首地址
tt aa[]={10,25,34,4,5,88,75};  这个数组有没有指向结构体的首地址
8# ID:390775 只看他
2018-9-3 13:02
tt   aa[6]={10,25,34,4,5,88,75};  
tt   L;
printf("%d \n",L.a);
定义了一个结构体数组变量aa 内含有  6个元素(结构体)  而每个结构体内的属性又是6个 相当于你只对数组中的第一个元素进行了赋值,后面默认为0, tt L;相当于定义了一个结构体变量L但是未对该变量内的成员赋值 所以是乱码 可以直接进行赋值  L.a = 16;
    typedef struct NN
  {
          u8 a,b,c,d,e,g,h;         

  }aa[1]={{10,25,34,4,5,88,75}}; 用typedef定义就是错的

   tt aa[]={10,25,34,4,5,88,75};
   tt *L=aa;
  printf("%d \n",L->c);
定义了一个数组aa[]  没给  数组大小  编译器会根据你给的初始值进行  判断  可以得到 你只初始化了一个元素  系统默认  aa只包含一个元素
tt *L = aa;  把数组的首地址赋值给L  当打印时  出来的是第一个元素的值。

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版