头文件
<stdio.h> // C99 标准库
// <> 寻找系统的资源
// “” 寻找我们自己写的资源
// .h .hpp(声明文件 头文件)
// .c .cpp (实现文件)
基本数据类型
boolean 非0即true, 0就是false
int i = 100;
double d = 200;
float f = 200;
long l = 100;
short s = 100;
char c = 'd';
// 字符串
char * str = "aaa";
// 不是随便打印的,需要占位
printf("i的值是:%d\n", i); // d == 整形
printf("d的值是:%lf\n", d); // lf == long float
printf("f的值是:%f\n", f); // f == float
printf("l的值是:%d\n", l); // d == 整形
printf("s的值是:%d\n", s);
printf("c的值是:%c\n", c); // c == char
printf("字符串:%s\n", str); // s == String
printf("char 数据类型所占的字节数:%d\n", sizeof(char));// 1
printf("short 数据类型所占的字节数:%d\n", sizeof(short));// 2
printf("float 数据类型所占的字节数:%d\n", sizeof(float));// 4
printf("int 数据类型所占的字节数:%d\n", sizeof(int));// 4
printf("long 数据类型所占的字节数:%d\n", sizeof(long));// 4
printf("double 数据类型所占的字节数:%d\n", sizeof(double));// 8
//1字节(Byte)=8字位=8个二进制数
//1字位(bit)=1个二进制数
//1B=8b
//1KB=1024B
//1MB=1024KB
//1GB=1024MB
if (0) {
printf("真\n");
} else {
printf("假\n");
}
if (43665) {
printf("真\n");
} else {
printf("假\n");
}
if (-545) {
printf("真\n");
} else {
printf("假\n");
}
NULL
return NULL; // NULL == 0
指针(%p、&、*)
// Java 万物皆对象
// C C++(对象) 万物皆指针
// Linux 万物皆文件
// %p == 地址输出的占位
// & == 取出地址
// * == 取出指针对应的值
int number1 = 100000;
printf("此number1变量的地址是:%p\n", &number1);
int number_int = 100;
double number_double = 200;
printf("number_int的值是:%d\n", number_int);
printf("number_double的值是:%lf\n", number_double);
// * == 取出number_int地址所对应的值 == 100
// 指针取出值
printf("number_int的值是:%d\n", *(&number_int));
printf("number_double的值是:%lf\n", *(&number_double));
// ================ 难度
int * intP = &number_int;
double * doubleP = &number_double;
// 输出 100 和 200
printf("number_int的值是:%d\n", *intP);
printf("number_double的值是:%lf\n", *doubleP);
指针大小
-
指针占用的内存大小是? int double xxx 的指针 永远都是 4个字节(32) 4*2(64)
-
指针类型有何用?。 既然都是 4个字节,为什么还要分 指针类型
-
答:取值的时候才知道怎么取(比如数组取值的时候知道类型才知道下一个元素要取多少个字节),这就是类型规定的好处
多级指针的核心是:指针存放的是地址,但是指针本身也有地址
函数
Main函数要不要返回,跟工具有关系
C代码是从上往下查找的,如果函数写在main函数下方,要先声明
// C语言不允许函数重载
// 由于C语言不支持函数重载,所以声明的函数,不需要写参数
void changeAction();
Question
- 为什么 main函数 和 update 函数 i 的内存不地址一样?
void update(int * i) {
// 形参i是一个新的变量,然后对这个新的变量赋值,所以和mian函数中传过来的i的内存地址是不一样的
// printf("update函数,i的内存地址是:%p\n", &i); // 2000H
printf("update函数,指针i的指向的值是:%p\n", i); // 1000H
* i = 999;//这句含义是取出内存地址1000H对应的值 并把这个值赋值为999
}
int main1() {
int i = 100; // 1000H的内存地址
update(&i);
printf("main函数,i的内存地址是:%p\n", &i);
printf("main函数,i的值是:%d\n", i);
return 0;
}
网友评论