指针与数组

数组的特点:

  • 类型一样
  • 内存连续分布
  • 初始化的时候必须知道大小(编译器可以帮我们数),否则报错(编译器不会让通过的)

由于数组元素内存连续分布,很符合指针的运算,所以可以说数组和指针是天生的好朋友

指针在数组上的应用

遍历一维数组

#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    int a[5] = {1,2,3,4,5};
    int *p = a;
    for (int i = 0; i < sizeof(a)/sizeof(int); i++, p++)
    {
        cout << *p << endl;
    }
    p = NULL;
    return 0;
}

/*
1
2
3
4
5
*/

行指针遍历二维数组: 二维数组在底层是一个连续的内存单元,并没有行列之分

#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    //等价于int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12}};
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++)
        {
                cout << *(*(a+i)+j) << endl;
        }
    }
    return 0;
}
/*
1
2
3
4
5
6
7
8
9
10
11
12
*/

用数组名 列指针遍历二维数组

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    //定义指针
    int *col = a[0];//col是某行某列的指针 把第一行地址赋值给指针col
    for(;col<a[0]+12; col++){
        //地址每次循环+1指向下一行一列
        if( (col-a[0])%4==0 && col!=a[0]){
            printf("\n");  
        }  
        printf("%d ", *col);
    }
     printf("\n");  
    return 0;
}

/*
1 2 3 4 
5 6 7 8 
9 10 11 12
*/

用指针 列指针遍历二维数组

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    int *p = *a;
    int *arr = *a;//二维数组首地址等同于 int *arr = fa[0]
    for(;arr<p+12; arr++){
        //地址每次循环+1指向下一行一列
        if( (arr-p)%4 == 0 && arr!=p){
            printf("\n");  
        }  
        printf("%d ", *arr);
    }
    printf("\n"); 
    return 0;
}

/*
1 2 3 4 
5 6 7 8 
9 10 11 12
*/

results matching ""

    No results matching ""