黑马程序员——C语言小结------其他数据类型

一、定义指针变量指向sum函数

左边的int:指针变量p指向的函数返回int类型的数据

右边的(int, int):指针变量p指向的函数有2个int类型的形参

void sum(int a, int b)
{
}
int (*p)(int, int);
p= sum;

(*p)是固定写法,代表指针变量p将来肯定是指向函数

左边的void:指针变量p指向的函数没有返回值

右边的():指针变量p指向的函数没有形参

   类比OC中block的定义void (^myBlock) (参数) = ^{}

二、根据变量的作用域,可以分为:

  1.局部变量:

    1> 定义:在函数(代码块)内部定义的变量(包括函数的形参)

    2> 作用域:从定义变量的那一行开始,一直到代码块结束

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

    4> 没有固定的初始值

  2.全局变量

    1> 定义:在函数外面定义的变量

    2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享)

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

    4> 默认的初始值就是0

三、数组:只能由多个相同类型的数据构成

 结构体:可以由多个不同类型的数据构成

#include <stdio.h>

int main()

{

    //int ages[3] = {[2] = 10, 11, 27};

    //int ages[3] = {10, 11, 29};

    // 1.定义结构体类型

    struct Person

    { // 里面的3个变量,可以称为是结构体的成员或者属性

        int age; // 年龄

        double height; // 身高

        char *name; // 姓名

    };

    // 2.根据结构体类型,定义结构体变量

    struct Person p = {20, 1.55, "jack"};

    p.age = 30;

    p.name = "rose";

    printf("age=%d, name=%s, height=%f\n", p.age, p.name, p.height);

    /* 错误写法

    struct Person p2;

    p2 = {30, 1.67, "jake"};

    */

    struct Person p2 = {.height = 1.78, .name="jim", .age=30};

    //p2.age = 25;

    return 0;
}

四、补齐算法:结构体所占用的存储空间 必须是 最大成员字节数的倍数

 void test1()
{
  struct Student
    {
        int age;// 4个字节
        char a;
        //char *name; // 8个字节
    };

    struct Student stu;

    //stu.age = 20;

    //stu.name = "jack";

    // 补齐算法(对齐算法)

int s = sizeof(stu);  //s == 16

五、结构体注意点

1.定义结构体变量的3种方式

1> 先定义类型,再定义变量(分开定义)

 struct Student
 {
    int age;
 };
 struct Student stu;

2> 定义类型的同时定义变量

 struct Student
 {
    int age;
 } stu;

 struct Student stu2;

3> 定义类型的同时定义变量(省略了类型名称)

 struct
 {
    int age;
 } stu;

2.结构体类型的作用域

  1> 定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)

  2> 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)

六、结构体数组

 struct RankRecord
    {
        int no; // 序号  4
        int score; // 积分 4
        char *name; // 名称 8
    };

        // 对齐算法

    // 能存放3个结构体变量,每个结构体变量占16个字节

    /*
     int no; // 序号  4
     char *name; // 名称 8
     int score; // 积分 4
     */

    struct RankRecord records[3] =
    {
        {1, "jack", 5000},
        {2, "jim", 500},
        {3, "jake",300}
    };

    records[0].no = 4;

    // 错误写法

//records[0] = {4, "rose", 9000};

七、1.指向结构体的指针的定义

struct Student
{
        int age;
};
 struct Student *p;

2.利用指针访问结构体的成员

  1> (*p).成员名称

  2> p->成员名称

八、结构体和函数

1.如果结构体作为函数参数,只是将实参结构体所有成员的值对应地赋值给了形参结构体的所有成员,修改函数内部结构体的成员不会影响外面的实参结构体

2.如果将结构体指针作为函数参数,是将结构体的地址传给了形参,修改函数内部结构体的成员会影响外面的实参结构体

时间: 2024-10-21 07:30:06

黑马程序员——C语言小结------其他数据类型的相关文章

黑马程序员_01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)

------- android培训.java培训.期待与您交流! ---------- Java语言主要由5中符号组成 标识符:数字.字母.美元符.下划线(注意不能数字开头) 关键字:goto和const保留了它们,但是Java没有使用. 运算符:注意运算符优先级(左结合和右结合要注意) 分隔符:注意+号可以分割字符串. 注释:三种注释. 数据类型与变量 常量: 整型 浮点型 字符:注意后面跟三个八进制(\ddd)和 四位unicode码(\u8bf7) (不区分大小写) 字符串 布尔型 变量:

黑马程序员--C语言基础之--数据类型

------- IOS培训期待与您交流! ---------- 所谓的类型,就是对数据分配存储单元的安排,包括存储单元的长度以及数据的形式,不同的类型分配不同的长度和存储的形式,C语言允许使用的数据类型如下图: 接下来将对几个类型做一个简单的介绍: 一.基本数据类型之--整型(int) (一).系统中为每一个整型数据分配了4个字节的存储空间,整型数有以下几种类型: (1)短整型(short int):类型名为shotr int或者简写为short, 系统为分配了2个字节的存储空间,变量值的范围是

黑马程序员-c语言基础:各种数据类型的输出占位符

c语言中的输出操作相对java来说是比较麻烦的,每种数据类型的输出都有各自的占位符: 下面是各种数据类型的输出占位符: short/int : %d int a = 1; printf("这个整数是:%d", a); long: %ld; (long 是int得修饰,不能算是一种单独的数据类型,只是比int多了四个字节的存储空间) long long: %lld char : %c float/double : %f  float默认是6位小数输出:可以在%f中控制:例如:%.2f:输

黑马程序员_C语言总结-基础部分

C语言基础 1.C语言的关键字 1>关键字就是C语言提供的有特殊含义的符号,也称为保留字,C语言中一共有32个关键字,这些关键字都有自己的含义 例如:int double float if  else switch for 等等 2.标示符的概念: 1>标示符就是在程序中自定义的一些名称,比如函数名,变量名,结构体名等等这些都是标示符 2>命名规则: 1>只能由英文字母的大小写和数字以及_下划线组成,且首字母必须为字母或者下划线_ 2>在C语言中是严格区分大小写的,比如if是

黑马程序员___多线程小结

----------- android培训.java培训.java学习型技术博客.期待与您交流! --------- 进程和线程 进程是正在进行中的程序,指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程. Java程序的进程里有几个线程:主线程, 垃圾回收线程(后台线程) 线程是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多个线程可共享数据.多线程:在同一个进程中同时运行的多个任务;一个进程至少有一个线程,为了提高效率,可以在一个进程中

黑马程序员_OC语言前期准备

OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应用程序. 拓展名:c语言-.c  OC语言.-m  兼容C++.-mm 注:其实c语言和oc甚至任何一门语言都只是我们为了实现一些功能,达到一些效果而采用的工具,抛开语法的差别外,我想最重要的应该是在解决问题的时候考虑的角度和方法不一样而已,然而这也构成了学习一门语言的重要性. 二.语法预览 (一)

黑马程序员-c语言变量作用域问题

c语言中的变量作用域总结 不管什么语言,main好像总是程序的入口,大括号是它的内容:变量的作用域总是困扰着我们,接下来,我们循序渐进的搞明白c语言中的变量作用域,首先得知道c是弱类型的语言,弱类型表现在很多方面: 1:你可以直接在程序中写一个常量,然后一个分号:1: 2:在定义函数时,void型的函数可以return:int型的可以不用写返回值. ---还有很多 下面我们一步一步开始:首先在main中定义的变量当然作用于整个main函数了 1:在main中定义变量 #include<stdio

黑马程序员——c语言学习心得—— 指针

黑马程序员——c语言学习心得—— 指针 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,打开文件fopen(文件名,打开方式);例如:FILE *fp = fopen("a1","r");  返回的是文件的指针(文件在内存缓冲区的首地址)fopen函数反回值 是指向 a1文件的指针,通常赋值给一个指针变量关于文件名a1 也可以是一个“路径+文件名”   c:\abc.txt----------------

黑马程序员——c语言学习心得——位运算符

黑马程序员——c语言学习心得——位运算符 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数以补码方式出现. 例如:9&