目录:

1.define定义常量和宏

2.指针

3.初始结构体


学习内容:

1.define是一个预处理指令

//1.作用一:定义标识符常量

//2.作用二:定宏

define定义的宏是用来完成替换的

#define ADD(x,y)  ((x)+(y))
#include <stdio.h>
int main()
{
printf("%d\n",ADD(2,3));
return 0;
}//我们来看一个没有括号的宏来证明宏的替换原理
//#include <stdio.h>
//#define ADD(x,y) x+y
//int main()
//{
//printf("%d\n",ADD(2,3))   //此时打印的结果为5,在ADD前面乘上一个4我们会发现结果是11而不是20
//return 0;
//}//printf("%d\n",4*ADD(2,3))  //因为执行的是宏替换,所以式子相当于是4*2+3=11

2. 指针

//1.内存:两个问题:内存是怎么编号的?     一个内存单元是多大的空间?在日常生活中我们发现电脑有32位和64位两种。32位-----32根地址线------地址线就是物理线-----物理线就可以通电-----正电是1,负电是2.-----正负电产生1和0两种信号,电脑把1和0两种电信号转换为数字信息:1和0组成的二进制序列。

从00000000000000000000000000000000到01111111111111111111111111111111再到10000000000000000000000000000000再到11111111111111111111111111111111的所有可能放到一起,把这样的二进制序列作为内存的编号(从0到2**32)。我们把这个编号称为内存单元的地址.

回答第二个问题:我们拿32位电脑举例。假设一个内存单元存储一个bit。那么32位电脑的内存为0.5GB。假如存放一个内存最小的char(一个字节),需要八个内存单元,八个bit就需要八个地址,很麻烦,最终经过平衡取一个内存单元为1个字节(byte)。64位电脑跟此类似。

单位换算:8byte=1bit    1kb=1024byte   1mb=1024kb   1gb=1024mb  1tb=1024gb  1pb=1024tb

//2.查找内存地址:使用&来查询地址,使用%p来进行打印(与%d相似,专门用来打印地址的)

在十六进制中10用A表示,11用B表示,以此类推

#include <stdio.h>
int main()
{int a = 10;  //a在内存当中要分配空间--4个字节return 0;    //我们通过&进行取地址0x012FF9A8,这里只显示a存储的第一个字节
}                //往后顺位取三个(16进制)就是它另外的三个字节//&a取地址只会显示它存储的第一个字节
#include <stdio.h>
int main()
{
int a = 10;
printf("%p\n",&a)    //%p是专门用来取地址的
return 0;
}

//3.存放地址:我们用pa来存放地址(不是必须用pa来进行存放,只不过是p代表地址,a代表你要存储的东西,所以综合起来叫做pa,便于我们查找与使用。),在C语言当中pa就是指针变量。

#include <stdio.h>
int main()
{
int a = 10;
printf("%p\n",&a);
int * pa = &a;   //pa是用来存放地址的,在C语言当中就是指针变量
return 0;  //整型变量用int类型创建,指针变量用int*进行创建
}

int*如何理解?  *说明pa是指针变量  int说明pa执行的变量是int类型的。

#include <stdio.h>
int main()
{
char ch = 'w';
char* pc = &ch;   //char指的是它的变量类型
return 0;
}

//4.我们该如何使用地址呢?--*(解引用操作)

#include <stdio.h>
int main()
{
int a = 10;
int* pa = &a;
*pa = 20;  //*  这是解引用操作  | *pa就是通过pa里面的地址找到a,然后修改a的值
printf("%p\n",a);
return 0;
}

//5.计算指针数据类型大小:都是四个字节,指针的大小都是相同的。指针是用来存放地址的,指针有多大,取决于地址的存储需要多大的空间。所以32位电脑是32bit---4byte;64位电脑是64bit---8byte。

#include <stdio.h>
int main()
{
printf("%d\n",sizeof(char*));
printf("%d\n",sizeof(short*));
printf("%d\n",sizeof(long*));
printf("%d\n",sizeof(int*));
printf("%d\n",sizeof(long long*));
printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double*));
return 0;
}               //你会发现测试的结果都是四个字节,指针的大小都是相同。

3.结构体:

让我们在C语言中有能力去描述那些复杂的对象。比如学生:姓名+年龄+学号+性别+住址着几项信息。所以结构体在C语言当中有着举足轻重的地位,非常的重要。

//1.结构体可以让C语言创建出新的类型来:

//创建一个学生类型
struct Stu
{char name[20];    //把name,age等元素叫做成员变量int age;double score;
};//创建一本书的类型
struct Book
{char name[20];float price;char id[30];
};
#include <stdio.h>
int main()
{struct Stu s = { "张三",20,95.5 }; //结构体的创建和初始化printf("%s %d %lf\n", s.name, s.age, s.score);   // 结构体.成员变量return 0;                           //.(操作符)
}//在存放结构体地址时,用什么数据类型指针----结构体指针 struct Stu* s = &s;

//2.常见类型打印的方法:%d整型  %p地址  %s字符串   %lf双精度浮点数  %f单精度浮点数  %c字符    这些都需要牢牢掌握,并且做到能够熟练应用。然后在应用刚刚学到的指针打印一遍。

//创建一个学生类型
struct Stu
{char name[20];    //把name,age等元素叫做成员变量int age;double score;
};
#include <stdio.h>
int main()
{struct Stu s = { "张三",20,95.5 }; //结构体的创建和初始化printf("1:%s %d %lf\n", s.name, s.age, s.score);   // 结构体.成员变量  //一次打印struct Stu* ps = &s;printf("2:%s %d %lf\n", (*ps).name, (*ps).age, (*ps).score);printf("3:%s %d %lf",ps->name,ps->age,ps->score);  return 0;       第三种打印方法完全等同于第二种打印方法
}

//3.操作符(->):要求必须是结构体指针->成员变量名。合理灵活使用操作符可以使代码变得更简洁。

C语言初阶:define定义的常量和宏,关于指针的详细讲解,初步认识结构体的使用相关推荐

  1. 《C语言初阶进阶完整教程》- 已完结 - qsort函数使用方法+(数组,结构体,手动实现函数)

    目录 前言 一.解释qsort函数 1.函数原型 2.深度解析comper比较函数 二.函数使用 1.int 2.结构体 三.手动实现函数 2.核心代码(两段) 四.升级使用方法 前言 提示:此文章可 ...

  2. C语言初阶:字符串,字符串搭配函数与指针的多重奥秘

    文章目录 1. 字符串的输出遍历 2. 字符串与函数 3. 字符串指针的初始化 4. 字符数组 5. 字符串函数 6. 练习:天干地支 1. 字符串的输出遍历 字符串遍历打印: #include &l ...

  3. C语言初阶知识点思维导图(超大图片、超级详细版)

  4. C语言初阶_初识C语言(1)

    凡是过往,皆为序章 期末考试结束了,真是感慨良多啊...... C语言编程题大家都做对了多少呢? 不管怎么样,都已经过去了.不管你学得怎么样,都可以在接下来的时间里,我们一起重新回顾一遍C语言初阶的知 ...

  5. [C语言]static关键字--#define 定义常量和宏--初识指针--初识C语言(四)

    文章目录 前言 一,static关键字 二,#define 定义常量和宏 三,初识指针 总结 前言 本节主要记录初识C语言第四节内容. 内容包括:static关键字------#define 定义常量 ...

  6. C语言——初识C语言(define定义常量和宏,指针,结构体)

    1.1define定义常量和宏 define    定义符号(定义常量) //define 定义标识符常量 #define MAX 1000 define    定义宏(宏是有参数的,参数用来替换) ...

  7. C语言初阶(18) | 数组详解

    目录 1.数组的定义 2.一维数组 2.1一维数组的格式 2.2一维数组的初始化 2.3一维数组的使用 2.4一维数组再内存中的存储 3.二维数组 3.1二维数组的创建和初始化 3.2二维数组的使用 ...

  8. 五十分钟带你看遍C语言初阶语法(总纲)

    C语言初阶语法(总纲) 此篇博客包含了前面C语言所有的基础语法,写这一期的博客不仅是为了记录自己的学习成果也是为了让更多的朋友能学到对自己有用的知识,如果总有一个知识点帮助到了你,给卑微博主点点关注加 ...

  9. C语言初阶——6.进制

    C语言初阶--6.进制 1. 进制 百度百科: 进制也就是进位计数制,是人为定义的带进位的计数方法,对于任何一种进制-X进制,就表示每一位置上的数运算时都是逢X进一位. 十进制是逢十进一,十六进制是逢 ...

最新文章

  1. Win10 | Mac 在server上统一办公
  2. SAP RETAIL 使用事务代码WB03去显示一个后台配置的工厂
  3. python中的静态方法和类方法
  4. 智能风控平台核心之风控决策引擎(二)
  5. matlab中线性变压器,用MATLAB优化计算差动变压器的线性范围
  6. 贝叶斯网络的应用实例一
  7. Struts 2的拦截器(Interceptor)总结
  8. MDK5与Keil C51安装、合并、pack支持包的安装、STC芯片选型头文件的添加、界面美化(保姆级教程)
  9. Winedit 下载第三方库
  10. Spark-NLP:大规模自然语言理解
  11. 射频中IM3、IIP3、OIP3、G、P1dB指标计算
  12. 【推荐】无需路由器,利用WIN7开启wifi,手机高速上网
  13. 算法高级(15)-LVS的负载均衡策略及LVS+KeepAlived+Nginx实现高可用方案
  14. python 拆分excel工作表_用python编写的excel拆分小工具
  15. 一些有用的在线工具(二)
  16. 第14章 Linux终端设备驱动之终端设备
  17. 【笔记】复旦微FM33L026实现远程升级
  18. 云计算发展与BPaaS构建企业Private PaaS分析
  19. android 快盘接口,Android云盘试用体验第二期:金山快盘
  20. 遇到“word在试图打开文件时遇到错误”怎么办?

热门文章

  1. 数据结构-赫夫曼树(三)
  2. 如何查询一个IP上所绑定的域名
  3. 浅析C#UDP传输大文件
  4. neutron理解总结(一)
  5. 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)
  6. win 10 下matlab 7 运行不了,弹出警告,完美解决方案
  7. CHAPTER 5 文件共享 - FTP/FTPS/SFTP
  8. 个人云电脑—Parsec
  9. 老王的电影网站 - 推荐系统入门(一)
  10. Cognitive Complexity of methods should not be too high Refactor this method to reduce its Cognitive