C语言:数组指针

数组指针

定义:指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。 数组指针也叫行指针。
例:int (*p)[10]; p即为指向数组的指针,又称数组指针。

性质:数组指针用于指向一个数组,其本质为指针;

()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长,也就是说执行p+1时,p要跨过n个整型数据的长度。

举个栗子:

    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    int (*p)[10]=&arr;//数组的地址要存起来
    //上面的p就是数组指针
    int i=0;
    for(i=0;i<10;i++)
    {
        printf("%d ",*(*p+i));//第一种方法打印数组
    }
    printf("\n");
    for(i=0;i<10;i++)
    {
        printf("%d ",(*p)[i]);//第二种方法打印数组
    }
    printf("\n");

数组指针一般是用在二维数组中,例如:

//参数是指针的形式
void print(int(*p)[5],int x,int y)
{
    int i=0;
    for(i=0;i<x;i++)
    {
        int j=0;
        for(j=0;j<y;j++)
        {
            printf("%d ",*(*(p+i)+j));//*(p+i)=p[i],所以*(*(p+i)+j)=p[i][j]
        }
        printf("\n");
    }
}

int a[3][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};
print(a,3,5);
//1 2 3 4 5
//2 3 4 5 6
//3 4 5 6 7
//此处将每一行看成一个元素,利用数组指针将二维数组看成一维数组int [5]

一维数组指针和二维数组指针相关区别

一、指向一维数组的指针变量设一维数组为a[n]

定义方法:* 指针变量名即 * P
这个p一般指向的一维数组的首地址,即p=a,或者p=&a[0];p,a,&a[0]均指向同一单元,它们是数组a的首地址,也是0号元素a[0]的首地址。p+1,a+1,&a[1]均指向1号元素a[1]。类推可知p+i,a+i,&a[i]。

二、指向二维数组的指针变量设二维数组为a[m][n]

定义方法:(*指针变量名)[长度]即(*P)[n]
“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。

关于指针数组,我们大致遵循以下规则:

(1)访问数组元素,要么用下标法 [],要么用指针*.

(2)一维数组用一个下标,二维数组用两个下标

(3)指针指向数组元素时,指针表示数组元素的地址,用 * 对这个地址运算就求出了这个地址(即数组元素)的值

(4)指针数组指向二维数组时,因为它本身是个指向数组的指针,所以它的内层每加一,就相当于下一个数组

你可能感兴趣的:(C语言学习过程,c语言,其他,学习,经验分享,c++)