IOS学习第10天
深入变量的细节
1.局部变量是存在”栈区”的,栈区的地址是从高到底分配的
2.存储数据的时候,数据是以二进制的补码形式存储的,高位存储在高地址,低位存储在低地址
3.变量的地址:是指最低位所在的内存的地址
4.取变量的地址:&变量名 打印地址:printf(“%p\n”,&变量名)
垃圾值的由来
1.如果定义了一个局部变量,但并没有初始化一个值,则这个局部变量中存储的则是一个垃圾值
2.如果定义了一个全局变量,但没有初始化一个值,则系统会自动为全局变量赋值0
int类型的修饰符
字节数 | 占位符 | 可表示的数的范围 |
---|---|---|
int | 4 | %d |
short int | 2 | %hd |
long int | 8 | %ld |
long long int | 8 | %lld |
unsigned int | 4 | %u |
unsigned short int | 2 | %hu |
unsigned long int | 8 | %lu |
unsigned long long int | 8 | %llu |
数组
数组中存储的是具有相同类型的确定个数的变量
- * 为元素赋值的注意点*
1.为元素赋值的时候,赋值的数据类型要和元素的类型一致
2.为元素赋值的时候,下标不能月结,如果下标月结,就会产生难以预料的结果
3.声明数组的时候,必须要指定数组的长度
4.数组的长度一般是常量,也可以是变量或者是表达式
int len = 4
int a[len];
5.数组的长度不能使小数,不能是负数
6.数组的长度可以使1,也可以是0,但是没有意义
- 数组元素的默认值和初始化
1.声明一个数组却没有为数组的元素赋值,那么他里面的每一个元素都是一个垃圾值
2.关于数组元素的初始化:
1>定义的同时初始化:静态初始化
"注意:使用这种方法初始化 数组的长度就不能用变量
int nums[5] = ...//
1)int nums[3] = {1,2,3}//指定长度全部初始化
2)int nums[] = {1,2,3,4}//不指定长度全部初始化
3)int nums[5] = {1,2}//指定长度 部分初始化
//奇葩初始化
4)int nums[5] = {[0] = 10,[3] = 50}
只要是静态初始化,那么其中如果某些元素没有初始化,他的默认值0
2>先定义后初始化: 动态初始化
只有一种方式:挨个赋值,如果有某些元素没有赋值 那么默认值是垃圾值
int nums[5];
nums[0] = 10;
3.要将数组中的所有元素初始化为0,怎么办?
int nums[10] = {0};
4.这么赋值行不行?
int nums[6];
nums = {1,2,3,4,5,6};
int num = 0;
scanf("%d",&num);
int arr[num];//这样不会报错
int num = 0;
scanf("%d",&num);
//C99中 数组的长度 不能是变量
//xcode不彻底
int arr[num] = {0};//这样回报错why??
```
* 数组的遍历
int a[数组的长度];
for(int i = 0;i < 数组的长度; i++)
{
printf(“%d “,a[i]);
}
printf(“\n”);
* **数组在内存中的存储形式和数组的地址**
1.数组在内存中也是从高字节向低字节申请"连续"的(数组长度 * 每一个元素的字节数)个字节空间
2.数组的地址 == 数组中最低字节的地址 == 数组中下标为0的元素的地址 == 数组中下标为0的最低字节的地址 == 数组名
**数组名就是数组的地址**
* **查找数组中是否存在该元素**
int key = 50;
int nums[] = {13,12,343,45,635,46,756,8};
int len = sizeof(nums)/sizeof(nums[0]);
int flag = 1000;
for( int i = 0;i < len;i++){
//取出每一一个元素
if(nums[i] == key){
//找到了
printf("找到了!\n");
flag = 9999;
break;
}else{
// printf(“meizhaodao\n”);
//因为找没找到,只有到循环结束之后才知道
}
}
//循环结束 判断找没找到的第一种方式
// if(i == len){
// printf(“没找到”);
// }
循环结束 判断找没找到的第二种方式
if(flag == 1000){
printf(“没找到”);
}
“`