指针入门与基本数据类型
1. 说明C语言代码块结构
#include <stdio.h>
// <> 寻找系统的资源
// “” 寻找我们自己写的资源
// .h .hpp:(声明文件/头文件)声明文件还没有实现
// .c(C语言) .cpp(C++语言):(c或c++的实现文件)
// 代码结构
int mainT1() { // 函数的主入口
printf("你好,世界!\n");
getchar(); //阻塞函数,让程序停留
return 0;
}
2. 基本数据类型占位
#include <stdio.h>
//基本数据类型
int mainT2() {
short s = 100;
int i = 100;
long l = 100;
float f = 100;
double d = 100;
char c = 'd';
char* str = "Leo"; //字符串
//不是随便打印的,需要占位
printf("c的值是:%c\n", c); // c == char
printf("s的值是:%d\n", s); // d == 整形
printf("i的值是:%d\n", i); // d == 整形
printf("l的值是:%d\n", l); // d == 整形
printf("f的值是:%f\n", f); // f == float
printf("d的值是:%lf\n", d); // lf == long float
printf("str的值是:%s\n", str); // s == String
}
3. 基本类型占用的字节数
#include <stdio.h>
//基本数据类型占用的字节数(后续过程中,非常常用的) sizeof获取字节数
int main() {
//char 占几个字节 == 1
//int 占几个字节 == 4
//double 占几个字节 == 8
printf("char 数据类型所占的字节数:%d\n", sizeof(char));// 1
printf("int 数据类型所占的字节数:%d\n", sizeof(int));// 4
printf("double 数据类型所占的字节数:%d\n", sizeof(double));// 8
return NULL; // NULL == 0
}
4. 初次感受,万物皆地址
#include <stdio.h> // C99 标准库
// 地址概念
// Java 万物皆对象
// C C++(对象) 万物皆指针
// Linux 万物皆文件
int mainT4() {
// 指针 == 地址
// %p == 地址输出的占位
// & == 取出地址
int number1 = 100000;
printf("此number1变量的地址是:%p\n", &number1); // 地址 == 00B3FE90
return 0;
}
#include <stdio.h>
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 * (int类型的指针), double * (double类型的指针)
指针别名,指针变量 == 就是一个变量而已,只不过 是指针的 变量 而已
intP, doubleP
*/
}
#include <stdio.h>
// 通过指针(地址)修改值
// 其实不用指针直接修改值也是可以的,但是在其他应用会出现各种问题.
// 所以C语言还是用指针更好更规范.
int mainT6() {
int i = 100;
// p:我只接收地址,你给我一个100,不规范
// int * p = i;
int * p = &i;
i = 200;
printf("i的值是:%d\n", i);
*p = 300;
printf("i的值是:%d\n", i);
}
#include <stdio.h>
// C语言不允许函数重载, Java可以,C++可以
// void change(int i);
void change(int * i);
// 函数 取修改一个数(指针操作)
int mainT7() {
int i = 100;
change(&i);
printf("%d\n", i);
/*
int * i; 定义指针
*i = 888; 取出内存地址所对应的值修改成 888
*/
return 0;
}
/*void change(int i) {
printf("change内存地址:%p\n", &i);
i = 200;
}*/
// 使用指针 来修改
void change(int * i) {
*i = 666;
}
//#include <stdio.h>
//int main() {
// change();
// return 0;
//}
//函数不能写在main的下面,会报错
//(因为C是阶段性的语言,即面向过程的)
//void change() {}
//=====================================
//如果非要写在后面,可以先声明再实现)
//1.先声明
//void change();
//#include <stdio.h>
//int mainT7() {
// change();
// return 0;
//}
//2.再实现
//void change() {printf("leo");}
#include <stdio.h>
// 由于C语言不支持函数重载,所以声明的函数,不需要写参数
void changeAction();
int mainT8() {
int a = 100;
int b = 200;
printf("交换完成前的效果:%d,%d\n", a, b);
changeAction(&a, &b);
printf("交换完成后的效果:%d,%d\n", a, b);
}
// 只接收指针(内存地址) 内存地址 == 指针
void changeAction(int * a, int * b) {
int temp = *a;
*a = *b;
*b = temp;
}
链接:https://pan.baidu.com/s/1dWsgE_w3vCXU6MG-5kWHKQ
提取码:9vu5 破解版
答疑:
1.函数声明不需要写行参吗?
答:由于C语言不支持函数重载,所以声明的函数,不需要写参数
2.Main函数要不要返回?
答:跟工具有关系。
3.*a是a所在地址的值 &a就是a所在的地址 对吗?
答:对的。