基本项目结构
#include
// <> 寻找系统的资源
// “” 寻找我们自己写的资源
// .h .hpp(声明文件 头文件)
// .c .cpp (实现文件)
// 代码结构
int main() { // 函数的主入口
printf("坚强的");
getchar(); // 阻塞程序
return 0;
}
基本数据类型
#include
// 基本数据类型
int mainT2() {
int i = 100;
double d = 200;
float f = 200;
long l = 100;
short s = 100;
char c = 'd';
// 字符串
char * str = "Derry";
// 不是随便打印的,需要占位
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); // s == short
printf("c的值是:%c\n", c); // c == char
printf("字符串:%s\n", str); // s == String
printf("Derry");
// getchar();
}
基本数据类型所占字节数
#include
int main() {
printf("int 数据类型所占的字节数:%d\n", sizeof(int));// 4
printf("double 数据类型所占的字节数:%d\n", sizeof(double));//8
printf("short 数据类型所占的字节数:%d\n", sizeof(short));//2
printf("long 数据类型所占的字节数:%d\n", sizeof(long));//8
printf("float 数据类型所占的字节数:%d\n", sizeof(float ));//4
printf("char 数据类型所占的字节数:%d\n", sizeof(char ));//1
printf("str 数据类型所占的字节数:%d\n", sizeof(char * ));//8
return 0;
}
地址与指针:在C中 万物皆地址
// 地址概念
// Java 万物皆对象
// C C++(对象) 万物皆指针
// Linux 万物皆文件
int main() {
// 指针 == 地址
// %p == 地址输出的占位
// & == 取出地址
int number1 = 100000;
printf("此number1变量的地址是:%p\n", &number1); // 地址 == 00B3FE90
return NULL;
}
指针取值
int mainT5() {
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 * (int类型的指针)
指针别名,指针变量 == 就是一个变量而已,只不过 是指针的 变量 而已
intP, doubleP
*/
return NULL;
}
使用函数的时候 传值 如果想修改值 要传值所对应的地址 才能修改
#include
// C语言不允许函数重载, Java可以,C++可以
// void change(int i); // 先声明
void change(int * i); // 先声明
// 函数 取修改一个数(指针操作)
int mainT7() {
int i = 100;
change(&i);
printf("%d\n", i);
// * i 和 *i 有什么区别呢 没区别 写法而已
/*
int * i; 定义指针
*i = 888; 取出内存地址所对应的值修改成 888
*/
return 0;
}
// 函数不能写在 main的下面,会报错
// void change(int i) {}
// 再实现
/*void change(int i) {
printf("change内存地址:%p\n", &i);
i = 200;
}*/
// 再实现
// 使用指针 来修改
void change(int * i) {
*i = 666;
}
实例:交互两个数
#include
// 由于C语言不支持函数重载,所以声明的函数,不需要写参数
void changeAction();
int mainT8() {
int a = 100;
int b = 200;
changeAction(&a, &b);
printf("交换完成后的效果:%d,%d\n", a, b);
}
// 只接收指针(内存地址) 内存地址 == 指针
//方法一
void changeAction(int * a, int * b) {
int temp = *a;
*a = *b;
*b = temp;
}
方法二
void changeAction(int * a, int * b) {
int sum = *a + *b;
*a = sum - *a;
*b = sum - *b;
}