C语言相关知识——指针(数组补充)

1.数组指针和指针数组

1.数组指针

  • 概念:数组指针是指向数组的指针。
  • 特点:
    • 先有数组,后有指针
    • 它指向的是一个完整的数组
  • 一维数组指针:
    • 语法:
      数据类型      (*指针变量名)  【数据变量】
    • 案例:
      //数组指针:指向数组的指针
      #include <stdio.h>
      
      int main()
      {
      	//先有数组,再有指针
      	int arr[3]={1,2,3};
      	int len = sizeof arr / sizeof arr[0];
      	//定义一个指针
      	//数组指针的语法:数据类型(*指针变量名)[数据容量]
      	int (*p)[3] = &arr;
      	
      	printf("%p\n",p);
      	//p++;
      	//printf("%p\n",p);
      	
      	printf("%d\n",(*p)[2]);
      	
      	for(int i = 0;i < len; i++)
      	{
      		printf("%d\n",(*p)[i]);
      	}
      	printf("\n");
      	
      	return 0;
      }
      
  • 二维数组指针
    • 案例:
      //二维数组指针案例
      #include <stdio.h>
      
      int main()
      {
      	//数组指针:先有数组,后有指针
      	int arr[][3] = {{10,20,30},{100,200,300},{1000,2000,3000}};
      	
      	//创建一个数组指针,指向二位数组
      	//int (*p)[3] = &arr;
          //p[0]--->{10,20,30},p[1]--->{100,200,300},也就是说:p[0] = 元素10的首地址
      	int (*p)[3] = arr;//arr等价于&arr[0],p[0] = 元素10的首地址
      
      	//获取元素10?
      	printf("%d\n",(*p)[0]);//arr[0][0]
      	//获取元素2000?
      	printf("%d,%d,%d\n",*(*(p+2)+1),*(p[2]+1),(p[2][1]));
          //arr[i][j] ===> *(*(p+i)+j) ===> *(p[i]+j) ===>p[i][j]
      	return 0;
      }
      
  • 指针和数组中符号优先级:( )>[ ]>*

2.指针数组

  • 概念:指针数组是一个数组,数组中的每一个元素都是一个指针。
  • 特点:
    • 先有指针,后有数组
    • 指针数组的本质是一个数组,只是数组中的元素类型为指针
  • 语法:
    数据类型   * 数组名【容量】
  • 案例:
//指针数组

#include <stdio.h>

int main()
{
	//定义三个变量
	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;
}
  • 建议:我们一般使用指针数组处理字符串
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值