【Xcode学C-5】结构体、全局局部变量以及枚举变量的知识点

一、全局变量和局部变量

(1)全局变量定义在函数外,局部变量在函数体内,前后作用域不同,生命周期也不同。

二、结构体

(1)定义了结构体不会分配内存,只有用结构体定义了变量才会为这个变量分配内存。第一个成员的地址就是结构体变量的地址。

int main(int argc, const char * argv[]) {
    //结构体的格式
    struct person{
        int age;
        char *name;
    };
    //定义变量
    struct person p1;
    //赋值,多种赋值方式,比如 struct person p2={10,"tom"};
    p1.age=28;
    p1.name="andy";
    //访问
    printf("%s\n",p1.name);
    return 0;
}

(2)分配的空间大小是占用最大字节成员变量的倍数。比如上述结构体,int是4字节,char *是8字节,一共是12字节,但为了要是最大字节成员的整数倍,所以每个结构体变量一共是16字节。

(3)还有很多种方式定义结构体变量。除了以上方法,还可以在定义结构体的同时在后面分号前面加个p,直接定义一个变量。还有一种方式是匿名结构体,这种匿名结构体只能一次性定义变量,因为后续不能复用。

(4)结构体数组。就是在定义结构体变量的时候批量定义并初始化。如struct person p[3]={{},{},{}};。但很少用。结构体数组只能在定义的时候初始化。

(5)结构体和数组一样,不可以先定义变量,然后再赋值。

(6)指向结构体的指针,因为是指向结构体的,所以定义方式就是struct person *p;即可。p=&p1;就是把这个指针指向p1。重点是如何取值。可以用(*p).age;但是更普遍的是p->age。

(7)结构体,当然可以嵌套使用。

(8)结构体相比数组最大特点是,里面可以存放不同类型数值,而数组只能是同种数值。

三、枚举变量

int main(int argc, const char * argv[]) {
    //尽量不要使用数值,所有数值都是魔鬼数值
    //int gender=0;

    //定义一个枚举
    //我们可以给MAN=100,那么下面的值是一次递增的,即WOMAN是101
    enum Gender{
        MAN,
        WOMAN
    };
    //使用并定义一个枚举变量gender1
    enum Gender gender1=MAN;

    return 0;
}
时间: 2024-12-05 01:37:57

【Xcode学C-5】结构体、全局局部变量以及枚举变量的知识点的相关文章

Linux C中结构体初始化

    在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated initializer).下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_storage_driver = { .owner = THIS_MODULE, .name = "

C# Socket 入门4 UPD 发送结构体(转)

今天我们来学 socket  发送结构体 1. 先看要发送的结构体 using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices; namespace Lin.p2p.Mo{    /// <summary>    /// 通信消息格式    /// </summary>    [Serializable]    [StructLayout(L

C语言结构体点滴

结构的本质是C语言的一种数据抽象,通俗的说,是基本数据类型的重组.为什么要重组呢?因为基本数据类型不够用了.为什么不够用了呢?因为需要的信息类型太多了.这是一个很大的话题.信息本来是没有什么类型之分的,但是为了便于在计算机内部的管理,人们在C语言中把信息先分成了基本的几个类型,比如整型.浮点型.字符型.布尔型等等.但是呢,描述一个事物的全部信息有时候仅用一种基本类型是不够的,比如一本书的基本属性:作者(字符型).价格(浮点型).出版日期(我也不知道什么型).书名(字符型).然而操蛋的是,我们要处

全局结构体变量的初始化以及将结构体变量转换为char类型输出问题

#include<stdio.h> #include<stdlib.h> struct node{ int a; int b; char c; char d; }; /*struct node A; 全局变量不能在这儿进行初始化,令我震惊啊,错误让你迷茫到死 A.a=1; A.b=2; A.c='a'; A.d='c';*/ //struct node A={1,2,'a','c'};但是这种写法可以 1:初始化和赋值不是一个概念. 2:// 在全局空间(即函数体之外)只能执行数据

C++结构体再学心得

自己定义一个结构体,使用struct关键字 struct student { char name[20]; int age; int num; }; 定义好结构体,student就相当于变量类型,我们可以直接用来定义一个student类型的变量: student A; 也可以直接在定义结构体的时候直接进行定义变量: struct student { char name[20]; int age; int num; }A; 这个结构体可以通过sizeof(student)来获得变量类型所占用的诶村

【C/C++学院】0814-引用高级、引用高级增加/auto自动变量自动根据类型创建数据/Bool/Enum/newdelete全局/大数据乘法与结构体/函数模板与auto/宽字符本地化/inline

引用高级.引用高级增加 #include<iostream> #include<stdlib.h> // int a[10] // int (&ra)[10] // int a[2][5] // int (&ra)[2][5] void main1() { int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int(&ra)[10](a);//引用就是给原来的变量有一个别名同一个地址 int i = 0; for (

C编译器剖析_1.5 结合C语言来学汇编_指针、数组和结构体

让我们再来看一份C代码,及其经UCC编译器编译后产生的主要汇编代码,如图1.33所示,其中包含了数组.指针和结构体. 图1.33 数组.指针和结构体 按照C的语义,图1.33第9行的C代码是对局部数组number的初始化,需要把number[0]初始化为2015,而数组中的其他元素皆被初始化为0.UCC编译器采取的翻译方法是:先调用memset函数来把数组number所占的内存空间清0,然后再把number[0]设为2015,如图1.33的第17至24行所示.C库函数memset的API如下所示

小白学开发(iOS)OC_ 常用结构体(2015-08-14)

// //  main.m //  常用结构体 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //      1. 表示范围:NSRange 结构体 NSRange ran

小白学开发(iOS)OC_ 经常使用结构体(2015-08-14)

// //  main.m //  经常使用结构体 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //      1. 表示范围:NSRange 结构体 NSRange r