C语言基础 结构 -- 归纳【1】

有 PDF思维导图,可前往下载。

struct point{.....}p1,p2;  p1=p2(将数值进行传递), 注意:数组不可以。
    不可以将整体成员进行,整体的输入/输出:  scanf("%s%d%c%d",p1)  错误!    只可以进行单个成员的输入与输出。 scanf("%d%d",&p1.num,&p1.num1)
        可以像普通变量一样运算
    注意:结构名 不属于  首地址
        成员名可以与程序中的变量名同,但不是同一对象。
    初始化:  struct  student  p1={5,10}    or     struct student s1={.name="wangli",.sex='f'}
        字符串的初始化:   #include<string.h>   strcpy(p1.addr, "no.2 language");
        注意: 当其中一个成员未进行初始化且输出的时候,系统默认其值为0.
    需要注意一点:在写完一个struct结构时,运用于main函数中的时候,要说明一下。  eg:  void main(){ struct student p1;}    注意:当用到了指针的时候, 注意在main函数中的指向确认。eg:  void main(){ struct student p1,*t;  t=&p1;}
        在struct中,指针的成员数据引用:  (*p).number  或者: p->number    ,要注意: 当指针的位置进行改变 例如: p+i  .这个时候的引用就变成: (*(p+i)).number;
            这里涉及了地址的自加自减:如果是a[5], a是常量,不可进行自加自减,即:a++ 错误!但是指向a[5]首地址的指针p可以,因为指针是一个变量!可以p++
                有涉及到一个运算优先率的问题:++与->  ->   大于  ++  
                    1. (*p)++ 2.++(*p) 3.*(p++) 4.*(++p)
                    struct student stu[3]={{1000,20},{2000,19},{3000,23}};     p->number++   ++p->number    (*p++).number    (*++p).number
                        结果:1.->大于++ 且为后缀++ 所以输出为 1000  2.(此时结构体中的1000变为了1001) 同理,1001 的前缀++  所以是 1002;  3.先是 *p number ,再指针移位。 p++; 4.前缀的++p,所以为 3000.  
    struct 结构 表达形式:  1. struct student{}s1;  2.struct student{};  3.(省去了  名) struct{}s1,s2;
        注意: 可用符号常量 进行替换  struct student   eg: #define    STUDENT   struct student    这时,main 函数中说明的时候:  STUDENT s1,s2;

结构数组
    在 struct 结构中,表达的形式和struct student{} p1,p2; 一致,在初始化的过程中:eg:    struct student stu[2]={{.......},{........},{......}};
        要注意:数组 a[1],a[2]. 要理解为第几组数据。在引用成员上(和上述一样):#include<string.h>  struct student a[5]; a[1].number=10; strcpy(a[1].name,"xiaoming");
            在结构数组中,用gets函数输入字符串: gets(a[1].name);

指针易错点:
    传递参数的时候,将二元数组传递给指针,指针要写成:  int (*p)[n]    ----n为该二元数组的列数。
    要改变指针的值,*p  -------char s[5]={....}, p=s; *p="...."(正确);    char *p="....",*p="..."  错误!    
        例如: char *s="123456",*t="456789",strcat(s,t)  错误!
    注意:p+1 与 p++ 
        前者没有改变指向,后者,改变了指向。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值