博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针数组和二维数组指针变量
阅读量:4579 次
发布时间:2019-06-09

本文共 2559 字,大约阅读时间需要 8 分钟。

指针数组
概念:

    一个数组的元素值为指针则是指针数组。 指针数组是一组有序的指针的集合指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。

 

指针数组说明的一般形式为:

    类型说明符 *数组名[数组长度]

其中类型说明符为指针值所指向的变量的类型。

 

例如:

int *pa[3]

表示pa是一个指针数组,它有三个数组元素,每个元素值都是一个指针,指向整型变量

 

1、用一个指针数组来指向一个二维数组。

    指针数组中的每个元素被赋予二维数组每一行的首地址,因此也可理解为指向一个一维数组。

示例代码:

#include<stdio.h> 
main()
{
    int a[3][3]={
1,2,3,4,5,6,7,8,9};
    int *pa[3]={a[0],a[1],a[2]};
    int *p=a[0];
    int i;
    for(i=0;i<3;i++)
        printf("%d,%d,%d\n",a[i][2-i],*a[i],*(*(a+i)+i));
    for(i=0;i<3;i++)
        printf("%d,%d,%d\n",*pa[i],p[i],*(p+i));
}
281435597525456.png 
    本例程序中,pa是一个指针数组,三个元素分别指向二维数组a的各行。然后用循环语句输出指定的数组元素。
*pa[i]表示i行0列元素值,由于p与a[0]相同,故p[i]表示0行i列的值,*(p+i)表示0行i列的值。
    int *p[3]表示p是一个指针数组,有三个下标变量p[0],p[1],p[2]均为指针变量。
 
 
2、指针数组表示一组字符串并用作函数参数
 
示例代码1:
#include<stdio.h> 
void main()
{
    char *day_name(char *name[],int n);
    static char *name[]={ "Illegal day",
                          "Monday",
                          "Tuesday",
                          "Wednesday",
                          "Thursday",
                          "Friday",
                          "Saturday",
                          "Sunday"
                        };
    char *ps;
    int i;
    printf("input Day No:\n");
    scanf("%d",&i);
    if(i<0
        exit(1);
    ps=day_name(name,i);
    printf("Day No:%2d-->%s\n",i,ps);
}
char *day_name(char *name[],int n)
{
     char *pp1,*pp2;
     pp1=*name;
     pp2=*(name+n);
     return((n<1||n>7)? pp1:pp2);
}
   
281436001274642.png 
 
示例代码2:
#include<string.h> 
#include<stdio.h>
main()
{
    void sort(char *name[],int n);
     void print(char *name[],int n);
     static char *name[]={ "CHINA","AMERICA","AUSTRALIA",
                        "FRANCE","GERMAN"};
     int n=5;
     sort(name,n);
    print(name,n);
}
void sort(char *name[],int n)
{
     char *pt;
     int i,j,k;
     for(i=0;i<n-1;i++)
     {
         k=i;
         for(j=i+1;j<n;j++)
             if(strcmp(name[k],name[j])>0
                 k=j;
         if(k!=i)
         {
             pt=name[i];
             name[i]=name[k];
             name[k]=pt;
         }
     }
}
void print(char *name[],int n)
{
    int i;
    for (i=0;i<n;i++
        printf("%s\n",name[i]);
}
281436006588312.png 
 
   应注意指针数组和二维数组指针变量的区别。这两者虽然都可以用来表示二维数组,但是其表示方法和意义
是完全不同的。
 
 
二维数组指针变量
    二维数组指针变量是单个的变量,例如 int (*p)[4]表示p是一个指针变量,它指向包含4个整型元素的一维数组。
    int (*p)[4]; 表示*p有4个元素,每个元素为整型。也就是p所指的对象是有4个整型元素的数组,即p是指向一维数组的指针此时p只能指向一个包含4个元素的一维数组,p的值就是一维数组的起始地址。p不能指向一维数组中的某一元素。  
    int a[3][4];
    int (*p)[4];
    p=a;
    由于p是指向二维数组的0行元素,因此p+i是二维数组a的i行的起始地址。*(*(p+2)+3)是a[2][3]的值。
 
示例代码:
#include<stdio.h> 
void main()
{
    void average(float *p,int n);
    void search(float (*p)[4],int n);
    float score[3][4]={
                        {
65,67,70,60},
                        {
80,87,90,81},
                        {
90,99,100,98}
                        };
    average(*score,12); //求12个学生平均数
    search(score,2); //求序号为2的学生成绩
}
void average(float *p,int n)
{
    float *p_end;
    float sum=0,aver;
    p_end=p+n-1;
    for( ; p<=p_end ; p++)
        sum+=(*p);
    aver=sum/n;
    printf("average= %5.2f \n",aver);
}
void search(float (*p)[4],int n) //p是指向具有4个元素的一维数组的指针
{
    int i;
    printf("The score of No.%d are :\n",n);
    for(i=0;i<4;i++)
        printf("%5.2f ",*(*(p+n)+i));
    printf("\n");
}
281436012056212.png 
 

附件列表

 

转载于:https://www.cnblogs.com/vitah/p/4605521.html

你可能感兴趣的文章
凹凸贴图与法线贴图
查看>>
sqlserver跨服务器数据库sql语句
查看>>
设计模式-结构型模式,外观模式(6)
查看>>
Trie模版
查看>>
2018HDU多校训练-3-Problem F. Grab The Tree
查看>>
2016012032四则运算网页版结对项目报告
查看>>
淘宝专业版改基础版方法
查看>>
[转]ARM Pipeline
查看>>
[转]Blocking Code Injection on iOS and OS X
查看>>
vue $options 获取自定义属性
查看>>
Vue避免 v-if 和 v-for 用在一起
查看>>
【Source教程】GCFScape下载安装与使用
查看>>
两个集合相减怎么算_你家使用的防火窗(耐火窗)质量合格吗?怎么判断好坏呢?...
查看>>
python整数作为条件_Python整数类型(int)详解
查看>>
JRE System Library 与Java EE Libraries的区别
查看>>
颜色分类函数
查看>>
(中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。
查看>>
sort-归并排序
查看>>
django 快速实现完整登录系统(cookie)
查看>>
.NET中的out和ref关键字
查看>>