Java培训、Android培训、iOS培训、.Net培训、期待与您交流!

(以下内容是对黑马苹果入学视频的个人知识点总结)

(一)变量类型

1)局部变量

1> 定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。

2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。

3>生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收

2)全局变量

1> 定义:在所有函数外部定义的变量,称为全局变量。

2> 作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。

3>生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁

 #include <stdio.h>

 int age; // 全局变量

 void test()
{
int age; //局部变量
age = ;
} int main()
{
printf("%d\n", age);// int age = ; printf("%d\n", age);// test(); printf("%d\n", age);//
return ;
}

(二) 结构体

1)结构体的定义

结构体内部的元素,也就是组成成分,我们一般称为"成员"。

结构体的一般定义形式为:

 struct 结构体名{

      类型名1 成员名1;

      类型名2 成员名2;

      ……

      类型名n 成员名n;   

  };

第一行是关键字加结构体名

2)结构体变量

先定义结构体类型在定义变量来使用

 struct Student {
char *name;
int age;
}; struct Student stu;

3)结构体使用的一些注意事项

1>不允许本身递归定义

2>结构体内可以含有别的结构体,可以嵌套定义

3>定义结构体类型是并没有分配空间,只有当定义变量时才会分配空间给该变量

4>结构体占用的内存空间是它所含所有内存之和,而且成员之间是按顺序排列的

#include <stdio.h>

int main()
{
struct Date
{
int year;
int month;
int day;
}; // 类型
struct Student
{
int no; // 学号 struct Date birthday; // 生日 struct Date ruxueDate; // 入学日期 }; struct Student stu = {, {, , }, {, , }}; printf("year=%d,month=%d,day=%d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day); return ;
}

4)结构体的初始化

将各成员的初值,按顺序地放在一对大括号{}中,并用逗号分隔,一一对应赋值。

 struct Student {
char *name;
int age;
}; struct Student stu = {"MJ", };

5)结构体的使用

1>一般对结构体变量是以成员单位进行的

2>对某个成员变量也是结构体变量们可以连续使用“.”来访问

3>可以对结构体进行整体赋值

 struct Student {
char *name;
int age;
}; struct Student stu1 = {"MJ", }; // 将stu1直接赋值给stu2
struct Student stu2 = stu1; printf("age is %d", stu2.age);

4>结构体可以作为数组

定义的形式和结构体一样

  struct RankRecord records[] =
{
{, "jack", }, {, "jim", }, {, "jake",}
};

5>结构体作为函数参数

如果结构体作为函数参数,只是将实参结构体所有成员的值对应地赋值给了形参结构体的所有成员

修改函数内部结构体的成员不会影响外面的实参结构体

#include <stdio.h>
struct Student
{
int age;
int no;
};
void test(struct Student s)
{
s.age = ;
s.no = ;
} // 会影响外面的实参结构体
void test2(struct Student *p)
{
p->age = ;
p->no = ; } void test3(struct Student *p)
{
struct Student stu2 = {, };
p = &stu2;
p->age = ;
p->no = ;
} int main()
{
struct Student stu = {, }; //test(stu);
//test2(&stu);
test3(&stu); printf("age=%d, no=%d\n", stu.age, stu.no); return ;
}

黑马程序员——C语言基础 变量类型 结构体的更多相关文章

  1. 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...

  2. 黑马程序员——C语言基础 枚举 宏定义 自定义 static exterm

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)枚举 1)枚举类型的定义 枚举是C语言中的一种基本数据类型,并不是构 ...

  3. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  4. 黑马程序员——C语言基础 函数

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)函数的定义 1> 任何一个C语言程序都是由一个或者多个程序段( ...

  5. 黑马程序员——C语言基础 scanf函数 基本运算 三目运算符

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)scanf函数 1>  简单介绍一下scanf函数   这是在 ...

  6. 黑马程序员——C语言基础 指针

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)指针 首先指针是C语言中非常重要的数据类型,如果你说C语言中除了指针 ...

  7. 黑马程序员——C语言基础 char字符 数组

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)char类型 1)存储细节 ASCII单字节表(双字节GBK\GB2 ...

  8. 黑马程序员——C语言基础 内存剖析

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)进制 进制是一种计数的方式,数值的表示形式.有多种进制十进制.二进制 ...

  9. 黑马程序员——C语言基础 流程控制 选择结构和循环结构

    ---恢复内容开始--- Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)流程控制 1> 顺序结构:默认的流程 ...

随机推荐

  1. mysql中文乱码问题解决

    在mysql5.0以上,中文乱码不能用网上的大多数方法,我用网上改编码的问题,让我mysql服务器再也起不起来了. 我用的mysql5.7.16绿色免安装版. 在根目录下的配置文件里my.ini(或者 ...

  2. session,ajax 跨域cookie

    什么是Session, 什么是Cookie? Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID为标识符来 ...

  3. 关于HTML5你必须知道的28个新特性,新技巧以及新技术

    1. 新的Doctype 尽管使用<!DOCTYPE html>,即使浏览器不懂这句话也会按照标准模式去渲染 2. Figure元素 用<figure>和<figcapt ...

  4. 命名空间$.fn

    $.fn.xxx是可以用对象来调用的命名空间,例如 $.fn.input() 在声明时就可以用 $('abc').input()    $.fx是指jquery的特效. 如果使用显示.滑动.淡入淡出. ...

  5. PHP 知识结构

  6. 线性表-双向链表(LinkedList)

    双向链表:如图1-3 所示,会把当前header拆分开,重新插入一个Entry<E>. LinkedList源码 0.首先这个类中的两个变量 private transient Entry ...

  7. 火狐浏览器 js 1到9月份 new DATE不返回时间

    new Date('2016-1'); //错误 1到9月份必须 01 02 ...... 正确 new Date('2016-01'); var nowMonth = nowMonth>=10 ...

  8. htmlunit官网简易教程(翻译)

    1 环境搭建: 1)下载 从链接:http://sourceforge.net/projects/htmlunit/files/htmlunit/ 下载最新的bin文件 2)关于bin文件 里面主要包 ...

  9. Discuz论坛安全加固浅析

    [51CTO专稿]Discuz! 论坛以其功能完善.效率高效.负载能力,深受被大多数的网站喜爱和青睐.无独有隅,笔者所维护的论坛就是用discuz! 来构建的,从接手时候的7.2到现在x2.0,经历了 ...

  10. C# DateTime 格式化 奇怪问题!

    使用 DateTime.Now.ToString("MM/dd") 本地显示 06/16 window sevcie 2003  显示是 06-16 解决方法: DateTime. ...