数组的学习总结

一、数组的定义以及初始化

1.整型数组:

在C89中,不支持使用变量定义数组的长度

①一维整型数组

数组名是一个指针常量,保存的是首元素的地址(不可做自加操作)

在定义的时候初始化:int a[3] = {1,2,3}  或   int a[ ] = {1,2,3}

键盘读入初始化(五种方法):

int *p = a;

for(i = 0; i < 3; i++)
{
    scanf(“%d”,&a[i]);
    /scanf(“%d”,a+i);
    /scanf(“%d”,p++);
    /scanf(“%d”,p+i);
    /scanf(“%d”,&p[i]);
}
输出(五种方法):                                                                        
for(i = 0; i < 3; i++)
{
    printf(“a[%d] = %d”, i,a[i]); 
    printf(“a[%d] = %d”, i,*(a+i));
    printf(“a[%d] = %d”, i,*(p++));
    printf(“a[%d] = %d”, i,p[i]);
    printf(“a[%d] = %d”, i,*(p+i)); 
}


内存结构图:

数组的学习总结_第1张图片

&a:数组的地址
a:数组首元素的地址

&a + 1:跳一个数组的长度
a + 1:跳一个元素的长度

由此可以得出结论:

&a:对一位数组数组名取地址等于数组的地址
*(&a):对一维数组的地址取值等于数组首元素的地址

&a保存在一个数组指针变量中 int (*pa)[MAX_SIZE] = &a
所以,*(&a) = *pa


②二维整型数组

定义的时候可以省略行数,但不能省略列数

二维数组数组名:首个一维数组的地址

初始化:scanf(“%d”, *(a + i) + j);

输出:printf(“%d”,*(*(a + i) + j));

内存结构:

数组的学习总结_第2张图片

由上图可以看出

a = 0x1000;

a[0][0] = *a;

*(&a) = a;    //对二维数组的地址取值等于首个一维数组的地址

所以*(*(a+ i) + j)的解析为:

a + i:第i + 1个一维数组的地址

*(a + i):第i + 1个一维数组的首元素的地址

*(a + i) + j:第i + 1个一维数组的第j + 1个元素的地址

*(*(a + i) + j):第i + 1个一维数组的第j + 1个元素的值


③三维整型数组

*(*(*(a + i) + j) + k)的解析为:

a + i:第i + 1个二维数组的地址

*(a + i):第i + 1个二维数组的首个一维数组的地址

*(a + i) + j:第i + 1个二维数组的第j + 1个一维数组的地址

*(*(a + i) + j):第i + 1个一维数组的第j + 1个元素的值


2.字符型数组

①一维字符型数组

初始化:

scanf("%s", str);

输出:

printf("%d", str);

②二维字符型数组

int str[3][100]

初始化:

for(i = 0; i < 3; i++)

{

    scanf("%s", *(str + i));

}

输出:

for(i  = 0; i < 3; i++)

{

    printf("%d\n", *(str + i));

}


二、数组名的作用

1.一维数组:数组名是指针常量,保存的是数组首元素的地址

2.二维数组:数组名是指针常量,保存的是首个一维数组的地址

3.三维数组:数组名是指针常量,保存的是首个二维数组的地址


三、数组指针

是一个指针变量,保存的是数组的地址

1.定义

char (*pa) [3][100];

2.初始化

*pa = src  或者   char (*pa) [3][100] = &src

3.作用

在函数传参的时候会使用到数组指针

一维数组名用指针来传

二维数组名用一维指针数组来接

三维数组名用三维指针数组来接


四、指针数组

指针数组里定义的指针都是野指针,需要用malloc()来分配空间

1.定义

int *pa[3];

2.初始化:

for(i = 0; i < 3; i++)

{

    pa[i] = (int *)malloc(sizeof(int));

    scanf("%d", pa[i]);

    printf("%d", *pa[i]);

}

3.在定义函数时,数组指针要用指针的指针来接



你可能感兴趣的:(C/C++)