黑马程序员_iOS_C_数组

——- android培训java培训、期待与您交流! ———-

1.数组基本概念
1.1 把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。
1.2 数组属于构造数据类型。一个数组可以分为多个数组元素,这些数组元素可以是基本数据类型也可以是构造类型。
1.3 定义格式:类型说明符 数组名[常亮表达式];
2.一维数组
2.1 一维数组定义:

/*
相同类型的若干个数组成的有序集合。
数组的每个元素都不是一个数组。
*/
int a[3];//定义一个int类型的数组,数组名为a数组长度为3

注意事项:数组长度不可为变量(c99标准要求)。

int len = 3;
int a[len];//Xcode能通过

2.2 一维数组初始化:

//定义的同时完全初始化
int a[3] = {1,2,3};
int a[] = {1,2,3}//数组长度为3
//定义的同时部分初始化
int a[3] = {1,2}//第三个元素为零
int a[10] = {[3] = 23,[8] = 34};//给指定下标元素赋值
//先定义,再初始化
int a[3];
a[0] = 1;//下标法赋值

疑惑:

//初始化之前,数组中是否有值
int a[5];
for (int i = 0; i<5; i++) {
        printf("%d\t",a[i]);//输出为垃圾值
    }

输出:
这里写图片描述

//定义同时进行部分初始化
int a[5] = {1};
for (int i = 0; i<5; i++) {
    printf("%d\t",a[i]);//没初始化的部分自动初始化为0
    /*
    注意:
    先定义后初始化方式则不会默认初始化为0
    */
}

输出:
这里写图片描述
2.3 一维数组引用:
格式:数组名 [下标]
下标范围:1~n-1
2.4 一维数组遍历:

//for循环遍历数组
int a[5]={1,2,3,4,5};
for (int i = 0; i<5; i++) {
    printf("%d\t",a[i]);
}

2.5 一维数组的存储方式:
1)分配连续储存空间
2)数组名代表数组首地址,且从首地址连续存入
3)每个元素占相同字节数
4)元素之间地址连续
2.6 一维数组的地址:
数组名的地址 = 数组第一个元素的地址
数组名就是一个常量。
2.7 一维数组长度计算的方法:

//sizeof(数组名)
int a[5];
//数组总字符数
int len1 = sizeof(a);//5*sizeof(int);
//数组长度
int len2 = sizeof(a)/sizeof(int);//炒鸡中药(超级重要)

3.数组越界

int a[5];//下标范围0~4
a[5] = 1;//数组越界

4.数组元素作为函数参数
数组元素作为函数参数传递属于值传递。

#include <stdio.h>
void printNum(int n){
    printf("%d\n",n);
}

int main(int argc, const char * argv[]) {
    int a[2] = {1,2};//定义一个数组
    printNum(a[1]);//函数元素作为实参
    return 0;
}

5.数组名作为函数参数
数组名作为函数参数传递属于地址传递。

#include <stdio.h>
void change(int arr[3]){
    arr[0] = 10;//实则改变数组a元素的值
}
int main(int argc, const char * argv[]) {
    int a[3] = {1,2,3};
    change(a);//传递数组a的地址
    printf("%d\n",a[0]);
    return 0;
}

注意点:
1)形参必须与实参类型一致
2)形参与实参长度可以不相同
3)形参数组长度可以不写
4)数组名作为函数参数,数组长度信息丢失

阅读更多

没有更多推荐了,返回首页