指针进阶(一)(C语言)

🌞欢迎来到C语言的世界 
🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🌠本阶段属于锻体阶段,希望各位仙友顺利完成突破

📆首发时间:🌹2021年1月17日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

0️⃣指向一维数组的指针

1️⃣指针数组 

2️⃣二维数组名作为数据的指针数组

0️⃣✨✨✨指向一维数组的指针✨✨✨

指向一维数组的指针指向的类型类型是一个一维数组。定义一个指向一维数组的指针变量格式如下。

数据类型 (*指针变量名)[n]; 

意思是定义了一个指针变量,这个指针变量指向具有n个元素的一维数组,且这个一维数组中每个元素都是给定的数据类型。

1.ch指向由十个char类型的数据组成的一维数组

#include <stdio.h>
int main(void)
{

    char str[3][10]={"123","456","789"};
    char(*ch)[10];
    ch=str+1;               //ch可以赋值,str不能赋值 
    putchar(ch[0][1]);      //ch[0]就相当于一维数组名str[1]
    putchar('\n');
    ch=ch+1;               //改变ch的值可以改变不同的数据
    putchar(ch[0][1]);     //ch[0]就相当于一维数组名str[2]
	
	return 0;
}

GIF动态图片

 2.

#include <stdio.h>
int main(void)
{
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int (*ch)[4],sum=0; 
    int i;
    for(ch=a;ch<a+3;ch++)
        for(i=0;i<4;i++)
             sum+=*(*ch+i)
    printf("\n%d\n",sum);
	return 0;
}

GIF动态图片


1️⃣✨✨✨指针数组✨✨✨ 

   如果一个数组,它里面的变量全部是指针类型,且每个指针指向的数据类型相同,则称这种数组称为指针数组。定义指针数组的一般格式为:

数据类型 *数组名[n];

这实质上就是一个一维数组,只是它的元素存放的是指针值,数据类型不是其元素的数据类型,而是元素指向的数据类型。

1.

#include<stdio.h>
int main(void)
{ 
  int a[3]={1,2,3};
  int b[3]={20,30,40};
  int c[3]={50,60,70};
  int *ar[3]={a,b,c}; 
  printf("%d\n",ar[0][1]);  //ar[0]就相当于一维数组名a
  printf("%d\n",ar[1][1]);
  printf("%d\n",ar[2][1]);
  return 0; 
}

2. 

#include <stdio.h>
int main(void)
{ 
  char a[2][10]={"hong","zhangdkfp"};
  char *p[2]={"hong","zhangdkfp"};
  printf("%d\n",p[0]);
  printf("%d\n",p[1]);
  printf("%s\n",p[0]);
  a[0][1]='A';
  printf("%c\n",a[0][1]);
  return 0; 
}

 

p中存储的是两个串的首地址

系统已经把内存空间开辟了,每一个数据位置是一个变量区可以改变。指针数组可用来处理长度不一样字符数组问题,例如,要存一个班的学生姓名,如果用一个二维数组来存放这些数据,每一行必须事先固定好长度,这样短的姓名可能用不满一行的空间,造成空间浪费

 每一个数据位置是一个常量区不可以改变,  p[0][1]='A';是不能改变的。



2️⃣✨✨✨二维数组名作为数据的指针数组✨✨✨ 

#include<stdio.h>
void main(void)
{
int a[2][2]={1,2,3,4};
int b[2][2]={3,4,5,6};
int (*p[2])[2];//int[2] *p[2];(便于记忆)一维数组装的是地址指向2个整形组成的一行。 
p[0]=a;
p[1]=b;
printf("%d \n", p[0][0][1]);
printf("%d \n", p[1][0][1]);
} 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卿云阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值