1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C语言初阶:define定义的常量和宏 关于指针的详细讲解 初步认识结构体的使用

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

时间:2021-09-18 02:37:58

相关推荐

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

目录:

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。