前言
一:指针
二:结构体
三:bool类型
四:关系表达式/逻辑表达式
五:关键字
一、指针
内存以8位二进制划分为存储单元,为了有效访问每个存储单元,就给内存存储单元进行了编号,这些编号,被称为内存存储单元的地址。-------在C语言中就称为指针
一个存储单元 => 1个字节 => 8位二进制(bit)=> 2位十六进制
打印变量的地址
int main ()
{
int a = 10;
printf("0X%08X",&a);//0X代表十六进制,8代表宽度为8位,%X打印的是地址,也可用 %p 直接打印
return 0;
}
若以X64位系统打印,显示的是十六位的十六进制
若以X86位系统打印,显示的是八位的十六进制
int p----整型变量
int * p----指针变量,二者类型不同,其中 * 起声明作用
若 a = 100;
p = &a;
则 *p = 100, p <=> a ,其中p 起指向作用
小端存储:数据的低字节存储在低地址中,高字节存储在高地址中
大端存储:与小端存放相反
指针的操纵:操纵指针的自身,操纵指针的指向
指针的大小:
在X86系统下,都为4字节
在x64系统下,都为8字节
只存放首地址,低地址作为首地址
二、结构体
结构体:结构体是一种数据类型(由程序开发者自己设计的类型)
数组和结构体都属于聚合类型
struct Student
{
char s_id [10];
char s_name [20];
char s_sex [5];
int s_age;
}
int main ()
{
int a = 10;
struct Student s1 = {"09001","yhping","man",23};
printf("%s",s1_id);
printf("%s",s1_name);//成员访问
printf("%s",s1_sex);
printf("%d",s1_age);
return 0;
}
struct Student *sp = &s1;
*sp.s_id <=> s1.s_id
三、bool类型
bool类型----只有true和false(在.c文件中需引入头文件#include <stdio.h> 在.cpp文件中直接使用)
0,空字符,NULL(空指针)-----为假
int main ()
{
bool x = 3;//true 0000 0001
x -= 1;//0
x -= 1;//1
x -= 1;//0
return 0;
四、关系表达式/逻辑表达式
关系表达式:运算结果是bool值
逻辑表达式:运算结果是bool值
与(&&);-----截断(简洁与)优先级:11
或(||);-----截断(简洁或) 优先级:12
非(!);----优先级:2
若想改变值--------只能赋值,自加
五、关键字
一、typedef
int TNT-----变量
typedef int TNT-----类型
int a <=> TNT a
typedef struct student{
char name [20];
int age;
double grade;
}sss;
struct student s_1 <=> sss s_1 --------可以直接使用类型名称sss来定义一个新的结构体
typedef char str[100];
int main()
{
str ghost;
str person;
return 0;
}
可以使用数组的名字 str直接来定义一个数组
typedef 可把一切合法的变量转化为类型
二、静态关键字(static)
static int b = 0;------静态变量只初始化一次(在 C 语言中,static 关键字不仅可以用来修饰变量,还可以用来修饰函数。在使用 static 关键字修饰变量时,我们称此变量为静态变量。)
加静态关键字(static)在程序执行后被存在数据区
#include <stdio.h>
void count();
int main(void)
{
int i=0;
for (i = 0;i <= 5;i++)
{
count();
}
return 0;
}
void count()
{
static num = 0;//声明一个静态局部变量
num++;
printf("%d\n",num);
}
需要保留函数上一次调用结束时的值。
如果初始化后,变量只会被引用而不会改变其值
三、外部关键字(extern)
外部关键字(extern)----告诉编译器,这个变量在同一个工程的其他文件存在(起声明作用)--------在链接的时候定位
extern int g_max;//变量声明
extern void fun();//函数声明