C语言基础部分(下)

本文介绍了C语言中的#define用于定义常量和宏的机制,包括宏的参数替换和注意事项。接着讨论了指针的概念,作为内存地址的表示以及如何通过指针进行解引用操作。此外,还讲解了结构体在C语言中描述复杂数据类型的作用,并展示了如何声明和使用结构体。
摘要由CSDN通过智能技术生成

前言

相信大家看了我前两遍的文章应该对C语言的基础部分有所了解,这里是对剩下部分的续集。希望能帮助大家。

PS:C语言关键字讲解链接是和本系列相互联系的,内容方面相互补充,大家可以一起观看。

上篇链接:http://t.csdn.cn/sk2GF

中篇链接:http://t.csdn.cn/25kOO

本篇文章源代码链接:test_6_22/Blog.c · hunter/C_NS - 码云 - 开源中国 (gitee.com)

C语言关键字讲解链接:http://t.csdn.cn/w1HxF


#define 定义的常量和宏

上篇我们说道#define可以定义常量。

举个例子:根据C语言的语法要求数组arr的[]里面必须是常量,而用#define定义的M并没有报错,可知#define可以定义常量定义。

#define M 10
int main()
{
	int arr[M] = { 0 };
	return 0;
}

 #define定义的宏和函数有些类似

在程序中扩展#define定义符号和宏时,需要涉及几个步骤。

  1. 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换。
  2. 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值替换。
  3. 最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。

注意:

  1. 宏参数和#define 定义中可以出现其他#define定义的变量。但是对于宏,不能出现递归。
  2. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。
  3. 要注意定义宏时的括号,有括号和无括号的结果在某些场景里面是不一样的。宏是直接替换不做检查的。
//#define max 100 
//int main()
//{
// int a = max;//定义标识符常量
//return 0;
//}
int MAX(int x, int y)
{
	if (x > y)
		return x;
	else
		return y;
}//函数
#define MAX(X,Y) (X>Y?X:Y)//可以定义宏 -带参数
int main()//#define 
{

	int a = 10;
	int b = 20;
	//函数
	int max = 0;
	max = MAX(a, b);
	printf("%d\n", max);
	//宏的方式
	max = MAX(a, b);
	//max=(a>b? a:b)
	printf("%d\n", max);
	return 0;
}

指针

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元地址。

指针理解的2个要点:

  1. 指针是内存中一个最小单元的编号,也就是地址
  2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量

总结:指针就是地址,口语中说的指针通常指的是指针变量。

int main()
{
	//& -->取地址操作符
	//* -->解引用操作符
	int a = 10;//在内存中开辟一块名叫a空间 往这个空间里面存放10
	int* p = &a;//这里我们对变量a,取出它的地址,把a的地址存放在的*p里面,这样我们可以通过访问p去了解a。
	//a变量占用4个字节的空间,这里是将a的4个字节的第一个字节的地址存放在p变量中,p就是一个之指针变量。 
	*p = 20;//我们通过解引用p去访问a,并且把a的内容改为了20.
	printf("%d", a);//20
	return 0;
}

指针的解引用

int main()
{
	int a = 0x11223344;
	/*int* pa = &a;
	char* pc = &a;
	printf("%p\n", pa);
	printf("%p\n", pc);*///pa,pc输出结果一模一样
	char* pc = &a;
	*pc = 0;
	return 0;
}//指针类型决定了指针进行解引用操作的时候,能够访问空间的大小
//int* pc==>4  char* pc==>1 ==>看数据类型大小

指针的大小

  • 指针变量的大小取决于地址的大小
  • 32位平台下地址是32个bit位(即4个字节)
  • 64位平台下地址是64个bit位(即8个字节)
    int main()
    {
        printf("%d\n", sizeof(char*));//8
        printf("%d\n", sizeof(int*));//8
        printf("%d\n", sizeof(double*));//8
        return 0;
    }

 因为我的机器是64位所以是8,如果想看32位的这边可以在VS编辑器进行设置。

 结论:

  • 指针大小在32位平台是4个字节,64位平台是8个字节。
  • 指针就是地址,换言之在问地址的大小也是在32位平台是4个字节,64位平台是8个字节。

结构体

为了有能力描绘出更为复杂的场景,C语言就推出了结构体,结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

比如描述:人,人包含: 名字+年龄+性别 这几项信息。

这里只能使用结构体来描述了。

struct Peo //struct:结构体关键字 Peo:标签(标签可以随便起)
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    //成员变量 变量列表
};//这里的;不要忘记

int main()
{
    struct Peo hunter = { "ctx",10,"男" };//利用结构体关键字创建了一个hunter变量,并且初始化。
    printf("name=%s age=%d sex=%s", hunter.name, hunter.age, hunter.sex);
   

    struct Peo *s = &hunter;
    printf("name=%s age=%d sex=%s", s->name, s->age, s->sex);
    //结构体变量 .  结构体成员
    //结构体指针 -> 结构体成员
    return 0;
}

  •  结构体变量 .  结构体成员
  •  结构体指针 -> 结构体成员

结语:

感谢各位看到了这里,感谢各位给小弟面子,关于对C语言基础部分系列就到此为止,对于后面有关文件的内容或是一些知识点的深入内容就请各位自行去搜索或者等着我后面内容的更新,本系列目的是让初学老铁对简单的C语言代码能看的懂。

希望本篇文章对各位有所帮助,如果有问题欢迎各位留言!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值