Chinaunix

标题: 问个菜题,纯C中,如何在定义结构体时 [打印本页]

作者: kunson    时间: 2005-03-22 11:12
标题: 问个菜题,纯C中,如何在定义结构体时
给结构体的各个向量赋初值?

是C,不是C++
作者: albcamus    时间: 2005-03-22 11:44
标题: 问个菜题,纯C中,如何在定义结构体时
这也叫菜问题呀俺只知道以前gcc扩展了一种方式,用:赋值;现在C99规定了另一种语法,gcc就不支持以前那种了。C99的好象是.赋值的。具体记不清楚
作者: albcamus    时间: 2005-03-22 12:07
标题: 问个菜题,纯C中,如何在定义结构体时
试出来了第一种:
  1.       1 #include <stdio.h>;
  2.       2 #include <string.h>;
  3.       3 #include <stdlib.h>;
  4.       4
  5.       5 int main(int argc,char** argv)
  6.       6 {
  7.       7         struct student{
  8.       8                 int age;
  9.       9                 int score;
  10.      10         };
  11.      11
  12.      12         struct student s1 = {
  13.      13                 age : 5,
  14.      14             score : 10,
  15.      15         };
  16.      16
  17.      17       printf("s1.age is %d\n",s1.age);
  18.      18       printf("s1.score is %d\n",s1.score);
  19.      19
  20.      20       return 0;
  21.      21 }
复制代码

作者: knightxp    时间: 2005-03-22 13:27
标题: 问个菜题,纯C中,如何在定义结构体时
学习,受教!
作者: 菜青虫    时间: 2005-03-22 13:37
标题: 问个菜题,纯C中,如何在定义结构体时
原帖由 "albcamus"]
[code 发表:

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

int main&#40;int argc,char** argv&#41;
{
        struct student{
                int age;
                int score;
        };

        struct student s1 = {5,10};

      printf&#40;&quot;s1.age is %d\n&quot;,s1.age&#41;;
      printf&#40;&quot;s1.score is %d\n&quot;,s1.score&#41;;

      return 0;
}
[/code]
这样也行吧,好像不用写这么多,很麻烦的。嘿嘿
作者: aero    时间: 2005-03-22 13:44
标题: 问个菜题,纯C中,如何在定义结构体时
这样也可以,好像是C99的标准吧?

  1.       1 #include <stdio.h>;
  2.      2 #include <string.h>;
  3.      3 #include <stdlib.h>;
  4.      4
  5.      5 int main(int argc,char** argv)
  6.      6 {
  7.      7         struct student{
  8.      8                 int age;
  9.      9                 int score;
  10.     10         };
  11.     11
  12.     12         struct student s1 = {
  13.     13                 .age = 5,
  14.     14             .score = 10,
  15.     15         };
  16.     16
  17.     17       printf("s1.age is %d\n",s1.age);
  18.     18       printf("s1.score is %d\n",s1.score);
  19.     19
  20.     20       return 0;
  21.     21 }
复制代码
[/code]
作者: albcamus    时间: 2005-03-22 13:51
标题: 问个菜题,纯C中,如何在定义结构体时
to:aero兄
对,我就是在哪里看到的这个,结果想不起来了。呵呵。老来多健忘啊
作者: kunson    时间: 2005-03-22 13:54
标题: 问个菜题,纯C中,如何在定义结构体时
[quote]原帖由 "albcamus"][/quote 发表:


谢谢啊!

另外,如果对于字符型,字符串型的向量,怎么做涅?
作者: albcamus    时间: 2005-03-22 13:56
标题: 问个菜题,纯C中,如何在定义结构体时
>;>;这样也行吧,好像不用写这么多,很麻烦的。嘿嘿

试了一下,果然可以。不知道你我的写法是否在某些情况下有区别?我是看linux kernel的虚拟文件系统看到这种写法的,它还真的只用“:”的那种。不知道有没有什么原因。
作者: aero    时间: 2005-03-22 13:57
标题: 问个菜题,纯C中,如何在定义结构体时
原帖由 "kunson" 发表:


谢谢啊!

另外,如果对于字符型,字符串型的向量,怎么做涅?


   字符型就直接赋值好了。“字符串”(C里尽量不要使用这个概念,字符数组是其本来面目)也可以在定义的时候初始化。
作者: albcamus    时间: 2005-03-22 13:59
标题: 问个菜题,纯C中,如何在定义结构体时
>;>;“字符串”(C里尽量不要使用这个概念,字符数组是其本来面目)

严重同意!!这是C初学者最容易糊涂的地方之一。
作者: aero    时间: 2005-03-22 14:01
标题: 问个菜题,纯C中,如何在定义结构体时
看了一下,三种方式出来的汇编代码是一样的。
作者: kunson    时间: 2005-03-22 14:42
标题: 问个菜题,纯C中,如何在定义结构体时
谢谢各位!

我在Linux上
gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)

源文件 t.c

  1. #include <stdio.h>;
  2. #include <string.h>;
  3. #include <stdlib.h>;

  4. int main()
  5. {
  6.   typedef struct _Stu{
  7.     char name[32]:"asdf";
  8.     int  age:1;
  9.   }Stu, *PStu;

  10.   Stu  zhang;

  11.   printf("%s\n", zhang.name);
  12.   printf("%d\n", zhang.age);

  13. }
复制代码


编译:$ gcc t.c


  1. :! gcc t.c
  2. t.c: In function `main':
  3. t.c:8: error: bit-field `name' width not an integer constant
  4. t.c:14: error: cannot take address of bit-field `name'

  5. Shell 已返回1
复制代码


说我那个地方的宽度不是一个整数的常量?郁闷
作者: aero    时间: 2005-03-22 14:45
标题: 问个菜题,纯C中,如何在定义结构体时
狂晕,类型里怎么可以有具体的值呢?
作者: kunson    时间: 2005-03-22 14:51
标题: 问个菜题,纯C中,如何在定义结构体时
恩。如果把字符数组的相关行注释掉,还是能编译通过。如果在变量定义时,对字符数组用:初始化,会有同样的抱错。

我希望类型里就有了一定的初始工作,是不是太乱来了?呵呵。
作者: Haskell    时间: 2005-03-22 14:56
标题: 问个菜题,纯C中,如何在定义结构体时
原帖由 "kunson" 发表:
恩。如果把字符数组的相关行注释掉,还是能编译通过。如果在变量定义时,对字符数组用:初始化,会有同样的抱错。

我希望类型里就有了一定的初始工作,是不是太乱来了?呵呵。

那个冒号是“位域”的意思,不是初始化的意思。
定义类型和定义变量是两回事。
只有定义变量的时候才可以初始化,类型怎么初始化?
作者: kunson    时间: 2005-03-22 15:00
标题: 问个菜题,纯C中,如何在定义结构体时
原帖由 "Haskell" 发表:

那个冒号是“位域”的意思,不是初始化的意思。
定义类型和定义变量是两回事。
只有定义变量的时候才可以初始化,类型怎么初始化?


受教了,请说说位域的概念啊!
作者: aero    时间: 2005-03-22 15:02
标题: 问个菜题,纯C中,如何在定义结构体时
原帖由 "kunson" 发表:


受教了,请说说位域的概念啊!


仔细看教材!上面讲得很清楚啊!很基本的概念了。
作者: albcamus    时间: 2005-03-22 15:07
标题: 问个菜题,纯C中,如何在定义结构体时
>;>;受教了,请说说位域的概念啊!

你就理解成数据库二位关系表中的字段好了。


你说的那种在类型中就有初始化,我觉得跟面向对象设计模式里的singleton模式很相似,也不知理解的对不对。不知道C能不能半到(老实说,偶还怀疑C有什么办不到的),下面是一个美国牛人的书:
http://www.planetpdf.com/codecuts/pdfs/ooc.pdf
叫Object-Oriented Programming with ANSI-C。我没看过还,他说ANSI-C是一个Full-Scaled面向对象的程序设计语言。呵呵。
作者: kunson    时间: 2005-03-22 15:08
标题: 问个菜题,纯C中,如何在定义结构体时
原帖由 "aero" 发表:


仔细看教材!上面讲得很清楚啊!很基本的概念了。


说的是,我还回去了。

回家赶紧的。。。
作者: los    时间: 2005-03-22 16:51
标题: 问个菜题,纯C中,如何在定义结构体时
struct stutent{
     int num;
    char sex;
}s1={1,'n'};

就可以了吧
作者: zlrll    时间: 2005-03-22 20:55
标题: 问个菜题,纯C中,如何在定义结构体时
原帖由 "los" 发表:
struct stutent{
     int num;
    char sex;
}s1={1,'n'};

就可以了吧


你的就是各位老大们说的方法,只不过写到了一块而已。
作者: 黄山松    时间: 2005-03-23 09:53
标题: 问个菜题,纯C中,如何在定义结构体时
无聊!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2