C语言入门第十六天指针数组和多级指针

一:指针数组

1:所谓指针数组是指若干个具有相同存储类型和数据类型的指针变量构成的集合

2:指针数组的一般说明形式:
< 存储类型 > < 数据类型 > *< 指针数组名 > [< 大小 >]
指针数组名表示该指针数组的起始地址
#include
int main()
{
    int *p[2];
    int a[5]={1,2,3,4,5};
    p[0]=a+1;
    p[1]=a+3;
    printf("%d %d \n",a[1],a[3]);
    printf("%d %d \n",*(p[0]),*(p[1]));
    return 0;
}

3:声明一个指针数组

double *pa[2] , a[2][3];

把一维数组a[0] a[1]的首地址分别赋予指针变量数组的数组元数pa[0] pa[1]

pa [ 0 ] = a [ 0 ]; // 等价于 pa[0] = &a[0][0]
pa [ 1 ] = a [ 1 ]; // 等价于 pa[1] = &a[1][0]
因为a[2][3]是二维数组,所以a[0],a[1],表示第一行第二行的首地址,不是数。
此时 pa[0] 指向了一维数组 a[0] 的第一个元素,而 pa[1] 指向了一维数组 a[1] 的第一个元素。
4: 题目:使用指针数组处理二维数组,求出二维数组所有元素的和。
#include
int main()
{
    int *p[2];
    int a[2][3]={{1,3,5,},{2,4,5}};
    int i,j,sum;
    p[0]=a[0];
    p[1]=a[1];
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d \n",*(p[i]+j) );
            sum+=*(p[i]+j);
        }
    }
    printf("%d \n",sum);
    return 0;
}

二:多级指针

1:多级指针的定义:

a:把一个指向指针变量的指针变量,称为指针变量

b:对于指向处理数据的指针变量称为一级指针变量,简称一级指针。
c:而把指向一级指针变量的指针变量称为二级指针变量,简称二级指针。
二级指针变量的说明形式如下:
< 存储类型 > < 数据类型 > **< 指针名 >
#include
int main()
{
    int a=10;
    int *p;
    int* *q;
    p=&a;
    q=&p;
    printf("%p %p \n",p,&a);
    printf("%p %p \n",q,&p);
    return 0;
}
2:多级指针的运算
1. 指针变量 +1 ,是向地址大的方向移动一个目标数据。同理,多级指针运算也是以其目
标变量为单位进行偏移
2. 比如 , int **p; p+1 移动一个 int * 变量所占的内存空间。
#include
int main()
{
    int a=10;
    int *p;
    int* *q;
    p=&a;
    q=&p;
    printf("%p %p \n",p,&a);
    printf("%p %p \n",q,q+1);
    return 0;
}

(因为我电脑是64位的,所以所占内存空间位8)

3:指针数组也可也用另外一个指针来处理。

#include
int main()
{
    int a[3]={1,2,3};
    int *p[2];
    int* *q;
    p[0]=a;
    p[1]=a+1;
    q=p+1;
    printf("%d %d %d \n",a[1],*(p[0]+1),**q );
    return 0;
}
#include
int main()
{
    char *p[3]={"asd","qwe","zxc"};
    char* *q;
    int i=0,n;
    n=sizeof(p)/sizeof(char*);
    q=p;
    while(i

注意:一个是二级指针一个是指针数组一定要分清楚。

数组名就代表数组首地址

你可能感兴趣的:(c语言,算法,数据结构)