Day09 笔记
1,格式控制符的意义:
printf函数的内部去如何读取变量中的数据
%d:从这个变量的地址开始 读取4个字节的数据 并以10进制显示
%c:从这个变量的地址开始 读取1个字节的数据 并显示其代表的字符数据
如果我们要正确的读取出存储在变量中的数据,就要使用对应的格式控制符来读取。
2,总结格式控制符
整数:
%d %o 八进制 %x 16进制
%hd %ld %lld %u %hu %lu %llu
浮点数:
%f %lf
字符型:
%c
地址:%p
3,数组的定义
语法:int arr[5]
长度可以是变量 可以是整数 可以是宏 不能是负数 小数
也可以是0 代表不能存储数据 这么做没有意义
数组元素没有赋值的时候,元素是有值的 是一个垃圾值 不是0
4,数组的初始化
int arr[2];
arr[0] = 1;
arr[1] = 2;
int arr[2] = {1,2};
int arr[]={1,2,3,4,56}
int arr[3] = {10};
第一个赋10 其他赋0
int arr[4] = {[1] = 100}
第二个符100 其他赋0
5,数组的地址
arr[5] 数组名arr中存放的事数组的地址
数组名 == 数组的地址 == 数组中第0个元素的地址 == 数组中最低字节的地址
6,数组的长度
int len = sizeof(数组名)/sizeof(数组类型);
例如:int len = sizeof(arr)/sizeof(int);
也可以: int len = sizeof(arr)/sizeof(arr[0]);
sizeof 拿到的字节数 是 unsigned long 类型 所以输出时用 %lu
7,参数的值传递
函数 实参传递给形参的是值
所以在函数内部修改形参变量的值 不会影响实参的值
8,数组与函数
数组也可以作为函数的参数
调用的时候 实参需要时同类型的数组 在函数内部遍历
1),当数组作为函数的参数传递的时候 会丢失数组的长度
所以无法在函数内部泗洪sizeof去计算数组长度;
sizeof(arr) 得到的永远都是8.
原因:当数组作为函数的参数的时候,在声明这个函数的数组参数的时候
时声明了一个指针变量来存储数组的地址变量
为形参数组传值的时候,不是将整个数组传递过去,
而是将实参数组的地址传递给了形参变量
所以 参数数组不是一个数组 而是一个用来存储数组地址的一个指针变量
所以sizeof(数组名)永远都是 等于 8.
解决:void test (int arr[5],int length)
2),当函数的参数是一个数组的时候,长度可以不写,
因为根本没有用 根本不会去创建数组
3),当函数的参数是一个数组的时候
在函数的内部修改数组元素的值,实参数组的元素的值也会跟着一起修改
因为在传递的时候传递的是地址 所以实参数组和形参数组时同一个数组。
|
|