黑马程序员 《ios零基础教程》 --数组 2014-3-27总结

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


今天学习了一道内存剖析练习题和复杂数据类型中的数组。


一、内存剖析练习

1.一个函数,将小写字母转化为大写字母


#include <stdio.h>

char upper(char c)
{
    /*
    //思路:如果是小写字母,准换为大写字母,如果是其他数值,返回它本身
    方法一:
    if (c>='a' && c<='z') {  //确定范围大小
        return c - 32;       //在ASCII码表中,大小写字母相差32
    }else{
        return c;
    }*/
    
    
    //方法二:
    if (c>='a' && c<='z') {
        return c - 32;
    }
    return c;


}

int main(int argc, const char * argv[])
{

    char cc = upper('f');
    printf("%c\n",cc);
    return 0;
}



二、数组

1.数组的基本使用-定义遍历


#include <stdio.h>

int main(int argc, const char * argv[])
{

    //数组的定义格式:类型  数组名[元素个数];
    int ages[5] = {19 , 29 , 28 , 27 , 26};
    
    ages[1] = 29;
    /*
     数组的遍历
     ages[0] = 19;
     ages[1] = 29;
     ages[2] = 28;
     ages[3] = 27;
     ages[4] = 26;
     */
    
    /*
     遍历:按顺序查看数组的每一个元素
     */
    for (int i = 0; i < 5; i++) {
        printf("ages[%d] = %d\n",i ,ages[i]);
    }
    
//    printf("Hello, World!\n");
    return 0;
}

2.数组的使用注意


#include <stdio.h>

int main(int argc, const char * argv[])
{
    //都是正确写法
//    int ages[5] = {10 , 11 , 12 , 67  ,56};
//    int ages[5] = {10 , 11};
//    int ages[5] = {[3] = 10 , [4] = 11};
//    int ages[] = {10 , 11 ,14};
    
    //错误写法
    //int ages[];
    
    //错误写法
    /*只能在定义的同时进行初始化
     int ages[5];
     ages = {10 ,11 ,12 ,14};
     */
    
    //错误写法
    //如果想在定义数组的同时进行初始化,数组的元素个数必须是常量,或者不写
    //int ages[count] = {10 ,11 ,12};
    
    //正确写法
//    int ages['A'] = {10 , 11 ,12 ,14 , 16};
//    int size = sizeof(ages);
//    printf("%d\n",size);
    
    //正确写法
    int count = 5;
    int ages[count];
    ages[0] = 10;
    ages[1] = 11;
    ages[2] = 12;
    
    for (int i = 0; i < 5; i++) {
        printf("ages[%d] = %d\n",i , ages[i]);
    }
    return 0;
}

3.计算数组的长度


#include <stdio.h>

int main(int argc, const char * argv[])
{
    int ages[] = {10 , 11 ,12 ,78};
    
    int count = sizeof(ages)/sizeof(int);
    
    for (int i = 0; i < count; i++) {
        printf("age[%d] = %d\n",i ,ages[i]);
    }
    return 0;
}

4.数组的内存存储细节


#include <stdio.h>

int main(int argc, const char * argv[])
{
    /*
    char cs[5] = {'a' , 'A' ,'D' , 'e' , 'f'};
    
    printf("%p\n",cs);
    
    for (int i = 0; i < 5; i++) {
        printf("cs[%d]的地址是:%p\n",i ,&cs[i]);
    }*/
    
    int ages[3] = {10 , 19 ,20};
    
    printf("%p\n",ages);
    
    for (int i = 0; i < 3; i++) {
        printf("cs[%d]的地址是:%p\n",i , &ages[i]);
    }
    
    return 0;
}

5.数组与函数


#include <stdio.h>
//数组作为函数参数,可以省略元素个数
//数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组


void change(int array[])//数组作为函数参数,可以省略元素个数
{
    printf("array==%p\n",array);
    
    array[0] = 100;
}

void change2(int n)
{
    n = 900;
}

int main(int argc, const char * argv[])
{
    int ages[6] = {10 ,11 ,12 , 12 ,2 ,42};
    printf("ages==%p\n",ages);
    
    change(ages);//数组作为函数参数,传递是整个数组的地址
    
    change2(ages[0]);//这里是进行值传递,将ages[0]的值传递给change2
    
    printf("%d\n",ages[0]);
    return 0;
}

6.练习:设计一个函数,找出整形数组元素的最大值


#include <stdio.h>

//数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节
int maxOfArray(int array[], int length)
{
    
//    int length = sizeof(array)/sizeof(int);
    
    //1.定义一个变量存储最大值(默认就是首元素)
    int max = array[0];
    for (int i = 1; i < length; i++)
    {
        //如果当前元素大于max,就用当前元素覆盖max
        if (max < array[i])
        {
            max = array[i];
        }
    }
    printf("%d\n",max);
    return 0;
}


int main(int argc, const char * argv[])
{

    int ages[] = {18 ,23 ,54 ,21 ,2 ,452, 2};
    maxOfArray(ages, sizeof(ages)/sizeof(int));
    
    return 0;
}



    

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值