当前位置:首页 » 《随便一记》 » 正文

通过这14点,让你快速入门C语言(4)

11 人参与  2023年04月07日 16:09  分类 : 《随便一记》  评论

点击全文阅读


文章目录

12. #define 定义常量和宏12.1 #define 定义常量12.2 #define 定义宏 13. 指针13.1 内存13.2 指针变量的大小 14. 结构体 附:

12. #define 定义常量和宏

12.1 #define 定义常量

#include <stdio.h>#define MAX 1000#define STR "abcdef"int main(){    printf("%d\n", MAX);int a = MAX;int arr[MAX] = { 0 };printf("%d\n", a);printf("%s\n", STR);return 0;}

12.2 #define 定义宏

#include <stdio.h>//函数int Add(int x, int y){return x + y;}//宏#define ADD(x,y) ((x)+(y))#define MAX(x,y) ((x)>(y)?(x):(y))int main(){int a = 10;int b = 20;int c = Add(a, b);int d = ADD(a, b);int e = MAX(a, b);printf("%d\n", c);    printf("%d\n", d);    printf("%d\n", e);    return 0;}//宏的参数替换

13. 指针

13.1 内存

内存
注: 编号就是内存单元的地址,我们把地址也叫做指针(编号=地址=指针)


地址
当a创建好后,占用4个字节,每个字节都有一个地址(编号),&a拿到的是第一个字节的地址
注: 0x00B5F988 —— 16进制的数值


int main(){   int a = 10;   int * pa = &a;   return 0;}

注:
i) int * 整体是一个类型:整型指针类型
ii) * 说明 pa 是指针变量
iii) int 说明的是 pa 指向的对象是 int 类型的


#include <stdio.h>int main(){int a = 10;//4个字节//*&a;//aint * pa = &a;//pa是创建出来存放地址(指针)的,pa就是指针变量*pa = 20;//*是解引用操作符,*pa就是通过pa中存放的地址,找到pa指向的空间。//a = 20;  printf("%d\n", a);//& - 取地址操作符,取出谁的地址//* - 解引用操作符(间接访问操作符),通过地址找到地址指向的内容char* pc = &a;//理论上是支持的,但是为什么呢?char ch = 'w';char* pc = &ch;return 0;}

总结:

指针其实就是地址,地址就是内存单元的编号把地址进行存储的时候,就可以放到一个变量中,这个变量就是指针变量口头语中说的指针,一般指的是指针变量

13.2 指针变量的大小

指针变量的大小是多少呢?

因为指针变量是用来存放地址的,所以指针变量的大小取决于存储一个地址需要的空间。

电脑存在地址线(32/64)

32位环境下:32个0或者1组成的地址序列,需要32bit(4byte)的空间来存储,因此,指针变量的大小需要4个字节。64位环境下:地址的序列就是64个1/0组成的二进制序列,要存储起来,需要8个字节。

x86 —> 32位环境
x64 —> 64位环境

#include <stdio.h>int main(){char ch = 'a';char* pc = &ch;//sizeof 计算的结果是无符号整数的//对应的打印格式应该是:%zuprintf("%zu\n", sizeof(char*));printf("%zu\n", sizeof(pc));printf("%zu\n", sizeof(short*));printf("%zu\n", sizeof(int*));printf("%zu\n", sizeof(long*));printf("%zu\n", sizeof(long long*));printf("%zu\n", sizeof(float*));printf("%zu\n", sizeof(double*));return 0;}

14. 结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
例:学生:名字+年龄+性别+身高+体重

struct Tag{   成员列表;};

例:

struct Stu{   char name[20];   int age;   float score;};

以上就是一个结构体类型,与int、float相似,可以用结构体类型创建变量


#include <stdio.h>struct Stu{char name[20];int age;float score;};void Print(struct Stu * ps){//1.//printf("%s %d %f\n", (*ps).name, (*ps).age, (*ps).score);//2.结构体指针->结构体成员printf("%s %d %f\n", ps->name, ps->age, ps->score);}int main(){struct Stu s1 = { "zhangsan",20,95.5f };struct Stu s2 = { "lisi",40,99.8f };//结构体变量.结构体成员//.//->//输入数据到s2中scanf("%s %d %f", s2.name, &(s2.age), &(s2.score));//数组名本来就是地址,所以name不需要取地址printf("%s %d %f\n", s1.name, s1.age, s1.score);Print(&s2);return 0;}

附:

通过这14点,让你快速入门C语言(1)
通过这14点,让你快速入门C语言(2)
通过这14点,让你快速入门C语言(3)


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/58762.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 她的记忆停留在了最爱初恋的那年许欣柔楚临川完本_她的记忆停留在了最爱初恋的那年(许欣柔楚临川)
  • 全书浏览假千金的实习生男友霸占我办公室,我反手让他们倾家荡产(顾家明)_假千金的实习生男友霸占我办公室,我反手让他们倾家荡产(顾家明)全书结局
  • 童养夫让我给他的新欢出修复费(林嘉芝林思雅)_童养夫让我给他的新欢出修复费林嘉芝林思雅
  • 全文资助生女婿让我给他白月光付三千万月子中心钱(宋清玉宋雅)列表_全文资助生女婿让我给他白月光付三千万月子中心钱
  • 碎在时光里的谎言喻景宴秦明月完本_碎在时光里的谎言(喻景宴秦明月)
  • 旧爱剜心吻成灰席鄢之岑秋全书免费旧爱剜心吻成灰席鄢之岑秋全书免费
  • 结婚六年丈夫不碰我谁知儿子亲爹是寡头(纪清言傅司砚),结婚六年丈夫不碰我谁知儿子亲爹是寡头
  • 老公想换掉我的男胎,我笑他自不量力(宋薇于继业)_老公想换掉我的男胎,我笑他自不量力宋薇于继业
  • 给太子下了噬心蛊后,皇后找上门(小夭赵劼)全书浏览_给太子下了噬心蛊后,皇后找上门全书浏览
  • 豪门绝嗣!带球跑的夫人回来了!(谢长宴慕清杳)_豪门绝嗣!带球跑的夫人回来了!谢长宴慕清杳
  • 完美身材(李朵林之晴)_完美身材李朵林之晴
  • 离婚后,我和快穿系统绑定(白意秋陈荣周立慧)_离婚后,我和快穿系统绑定(白意秋陈荣周立慧)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1