指针数组的总结和问题

指针数组(*p[])用自己的话来讲就是一个存储指针的数组,数组里面的元素是指针。
举个例子:

char *a = "aaa";
char *b = "bbb";
char *c = "ccc";

char *p[3] = {a,b,c};  //里面的元素是a,b,c指针

下面我们来深入了解指针数组的内在

#include<stdio.h>
 
int main()
{
  char a[] = "ghhh";
  char b[] = "elkj";
  char c[] = "rrrr";
  char *p[3] = {a,b,c};

  printf("*(p[1]+1)= %c\n",*(p[1]+1));
  printf("*p = %s  ",*p);
  printf("p = %s  ",p);
  printf("a = %s\n",a);

  printf("a = %p  ",a);
  printf("*p = %p\n",*p);

  printf("&a = %p  ",&a);
  printf("p = %p\n  ",p);
}

运行结果:
在这里插入图片描述
从上面可以看出来,指针数组其实有点像二维数组,可以通过p[i]来打印出相应的字符串,(p[i]+j)打印出对应的单字符;从地址看p == a;(或者说p[0]==a,p[1]==b,p[2]==c);这里我一直有个不明白printf("&a = %p ",&a)和printf("a = %p ",a)的输出结果是一样(可能因为我不太明白指针是如何存储的),以及 printf("p = %s “,p);为什么输出的是p = a;而printf(”&a = %p ",&a)跟printf("p = %p\n ",p);输出的结果又不相同,有人懂的话希望可以帮助我解答疑惑。
指针数组也可以通过如下定义:

char *p[3] = {"ddd","fff","eeeee"};
  以上就是我对指针数组的认识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值