define定义常量和宏
define定义常量
define定义常量,这里的常量就是指字面常量,只要是常量都可以定义,如:
#include <stdio.h>
#define MAX 25000
#define STR "Hello,CSDN"
像以上这两种,都是可以成功编译的,当然,还有其他的定义,就不一一阐述。
define定义宏
如:
#include <stdio.h>
#define MAX(x,y) ((x)>(y)?(X):(Y));
它等价于
MAX (int x,int y){
int z=0;
z=((x)>(y)?(x):(y));
return z;
}
所以define定义宏和函数相比还是有一点不同的,这个它没有返回类型,并且"x","y"的类型也没有说明。当然define定义宏还有很多种,这里只是简单的了解一下。
指针
说起指针,大多数人都觉得这是一个很难攻克的东西,但是实际上,没有传言说的那么难,都是传言传的。
指针它与内存相关,了解了内存,指针才可以更好的理解。
在电脑里(以32位为例),一个内存单元是一个字节,同样一个内存单元有一个地址。(这里对为什么一个内存单元不是一个比特,kb,mb,而是一个字节进行简单的解释)
比如定义一个char a=‘b’,众所周知a占的内存是一个字节(前面的文章都提到了,什么Int,long的占的内存都有),而一个字节是8bit,所以如果一个内存单元是一比特的话,那么一个字符变量就需要8个地比特(地址),一个整形变量就需要4个字节,也就是32比特(地址),这对地址编号会浪费很多。同样的,一个内存单元是1kb,1mb的话就太大了,所以一个内存单元是一个字节。
定义指针的两种方法
- int* p=a,它表示的是定义了一个整型变量的指针p,里面存放的是a的地址
int a=9;int* p;*p=&a;
它表示的意思和上面是一样的
在这里*
是:*
解引用操作符,它的意思是通过p里面存放的地址来找到p指向的内容
指针变量的大小
在32位平台里运行的结果是4,在64位平台运行的结果是8
差异的原因
先上图这是32位平台的,在32位平台中,一个地址是由32个2进制数组成(8个16进制),而一个2进制数是1bit,所以一个地址也就占了4个字节(32bit=4byte)
同样在64位平台里,一个地址是由64个2进制数组成,所以一个地址也就占了8个字节(64bit=8byte)
这里对指针的简单理解就结束了
结构体
- 它的使用
上图
使用的方法就跟上面一样,稍微了解一下就行,如果需要详细的讲解我后面的文章后讲到。 - 结构体的两种输出方法
第一种:
第二种:
第二种是用函数输出的,不是我自己想的,所以我对第二个也不太熟悉,所以没有阐述 - 结构体的两种指向方法
这是函数指向
student1.name
这是普通指向
- 输入结构体数据
简单说明一下,因为是数组名,所以上面的name,sex,hometown都没有取地址(因为数组名就是地址),而整型就需要取地址了(自己悟把)