当前位置: 首页> 健康> 母婴 > 推广普通话演讲稿_企业名录查询软件_宁波seo公司_百度数据指数

推广普通话演讲稿_企业名录查询软件_宁波seo公司_百度数据指数

时间:2025/7/12 2:26:37来源:https://blog.csdn.net/m0_64837308/article/details/144574360 浏览次数:0次
推广普通话演讲稿_企业名录查询软件_宁波seo公司_百度数据指数

指针变量指向数组

通过指针引用数组元素

引用一个数组元素,可以用:

引用一个数组元素,可以用:

①下标法:如 a[i]形式

②指针法:如 *(a+i)或者 *(p+i)。其中a是数组名,p是指向数组元素的指针变量,其初值:p=a;
在这里插入图片描述

数组名作函数参数

表现形式:

1.形参和实参都是数组名

void fun(int arr[],int len);
void main()
{int arr[]={11,12,13};fun(arr,sizeof(arr)/sizeof(arr[0]));
}

2.实参用数组名,形参用指针变量

void fun(int *p,int len);
void main()
{int arr[]={11,12,13};fun(arr,sizeof(arr)/sizeof(arr[0]));
}

3.实参形参都用指针变量

void fun(int *p,int len);
void main()
{int arr[]={11,12,13};int *p =arr;fun(p,sizeof(arr)/sizeof(arr[0]));
}

4.实参为指针变量,形参为数组名

void fun(int arr[],int len);
void main()
{int arr[]={11,12,13};int *p =arr;fun(p,sizeof(arr)/sizeof(arr[0]));
}
案例
/*
需求:将数组a中n个整数按相反顺序存放
1.使用数组实现
*/
#include <stdio.h>
void inv(int arr[],int len)
{//反转思路:将第0个和n-1个对调,将第1个和n-2个对调int i=0;temp;//遍历数组for(;i<len/2;i++){temp = arr[i];arr[i] = arr[len-1-i];arr[len-1-i]=temp;}
}
/*
数组的反转:指针实现
const给变量的数据类型前面添加const,代表这个变量是只读变量,无法对此作出修改
*/
void inv2(int *p,const int len)
{int *i=p,*p=&arr[len -1],temp;//遍历数组for(;i<j;i++,j--){temp = *i;*i = *j;*j = temp;}
}
void get(int arr[],int len)
{for(int i =0;i<len;i++){printf("%d",arr[i]);}printf("\n");
}
int main ()
{int arr[] = {11,22,33,44,55,66};printf("%d",inv(int arr,int len));printf("%d",get(int arr,int len));return 0;
}

数组指针与指针数组

数组指针

概念:数组指针是指向数组的指针,本质上还是指针

特点:

  • 先有数组,后有指针
  • 它指向的是一个完整数组

一维数组指针:

  • 语法

    数据类型 (*指针变量名)(容量);
    
  • 案例:

    /**
    数组指针:指向数组的指针(这里不是指向数组元素的指针)
    */
    #include <stdio.h>int main()
    {//一维数组指针//先有数组,再有指针int arr[] = {100,200,300};int len =sizeof(arr)/sizeof(arr[0]);//int *p=arr;实际上还是指针变量int(*p)[3]=arr;//此时p不是指向arr数组的第一个元素,而是指向arr这个数组本身printf("%p\n",p);//p++;此时p++会跳出整个数组,访问到一块未知的内存,程序中尽量避免这种写法// printf("%p\n",p);//如何访问数组指针printf("%d\n",((*p)[2]));//300//遍历for(int i =0;i<len;i++){printf("%d",(*p)[i]);}printf("\n");return 0;
    }
    

我们之前所学的是指向数组元素的指针,本质上还是指针变量;现在我们学的是指向数组的指针,叫作数组指针。

二维数组指针

  • 语法

    数据类型 (*指针变量名)[行容量][列容量];
    
  • 案例

    #include <stdio.h>
    int main()
    {int arr[][3]={10,20,100,200,300,1000,2000,3000}//创建一个二维数组的指针//一个二维数组本质上还是一个一位数组,只不过它的元素也是数组int (*p)[3][3]=&arr;printf("%d",(*p)[1][0]);//遍历for(int i = 0; sizeof(arr)/sizeof(arr[0]);i++){int len = sizeof(arr[i])/sizeof(int);for(int j =0;j<len;j++){printf("%d",(*p)[i][j]);}printf("\n");}printf("\n");
    }
    
    #include <stdio.h>
    int main()
    {int arr[][3]={10,20,100,200,300,1000,2000,3000}//创建一个二维数组的指针//一个二维数组本质上还是一个一位数组,只不过它的元素也是数组int (*p)[3][3]=arr;printf("%d",(*p)[0]);//10//三种写法:第一种内部为行,外部为列printf("2000-%d,%d,%d",*(*(p+2)+1),p[2][1],*(p[2]+1); 
    }
    
  • 通过指针引用多维数组

在这里插入图片描述

案例

需求:用指向元素的指针变量输出二维数组元素的值

#include <stdio.h>
int main()
{//定义一个普通的二维数组int[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};//定义一个指针变量,用来接收二维数组的元素值int *p =arr[0];//&arr[0][0]//循环遍历for(;p<arr[0]+12;p++){if((p-arr[0])%4==0){printf("\n");  }printf("%d",*p);}printf("\n");return 0;  
}
案例2
/*
需求:数组指针-输出二维数组任一行任一列的值
*/
void arr_fun1()
{//定义一个普通的二维数组int arr[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};//定义一个指针变量,用来接收二维数组的元素值int (*p)[4] =arr;//创建两个变量,代表对应数据的行和列int row,col;printf("请输入行号和列号:\n");scanf("%d %d",&row,&col);printf("arr[%d][%d]=%d\n",row,col,*(*(p+row)+col));//循环遍历for(;p<arr[0]+12;p++){if((p-arr[0])%4==0){printf("\n");  }printf("%d",*p);}printf("\n"); 
}
指针数组

概念:指针数组是一个数组,数组中的每一个元素都是指针

特点:

  • 先有指针,后有数组
  • 指针数组的本质是一个数组,只是数组中的元素类型为指针

语法

数据类型 *数组名[容量]

案例:

#include <stdio.h>
{//定义三个变量int a=10,b=20,c=30;//定义指针数组,指针数组用来存放指针的int *arr[3] = {&a,&b,&c};//获取数组大小int len = sizeof arr/ sizeof arr[0];//遍历数组for(int i =0;i<len;i++)printf("%-3d",*arr[i]);//输出每个指针指向的值,需要解引用printf("\n");return 0;
}

nclude <stdio.h>
{
//定义三个变量
int a=10,b=20,c=30;
//定义指针数组,指针数组用来存放指针的
int *arr[3] = {&a,&b,&c};
//获取数组大小
int len = sizeof arr/ sizeof arr[0];

//遍历数组
for(int i =0;i<len;i++)printf("%-3d",*arr[i]);//输出每个指针指向的值,需要解引用
printf("\n");
return 0;

}


建议:我们一般使用指针数组处理字符串
关键字:推广普通话演讲稿_企业名录查询软件_宁波seo公司_百度数据指数

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: