变量的细节和数组

本文介绍了IOS学习中的变量细节,包括局部变量在栈区的存储、二进制补码表示及垃圾值的来源。同时,文章讨论了数组的特性和使用注意事项,如赋值类型一致、指定长度等,并提及数组元素的初始化与默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IOS学习第10天

深入变量的细节

1.局部变量是存在”栈区”的,栈区的地址是从高到底分配的

2.存储数据的时候,数据是以二进制的补码形式存储的,高位存储在高地址,低位存储在低地址

3.变量的地址:是指最低位所在的内存的地址

4.取变量的地址:&变量名 打印地址:printf(“%p\n”,&变量名)

  • 垃圾值的由来

    1.如果定义了一个局部变量,但并没有初始化一个值,则这个局部变量中存储的则是一个垃圾值

    2.如果定义了一个全局变量,但没有初始化一个值,则系统会自动为全局变量赋值0

  • int类型的修饰符

字节数占位符可表示的数的范围
int4%d
short int2%hd
long int8%ld
long long int8%lld
unsigned int4%u
unsigned short int2%hu
unsigned long int8%lu
unsigned long long int8%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(“没找到”);
}
“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值