指针数组和数组指针

本文详细解析了指针数组与数组指针的概念及其使用方式,通过具体实例展示了两者之间的不同之处,并介绍了如何正确地应用这两种数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候我们看到数组指针和指针数组是不是不注意看就很容易把它们忽略掉呢,记得以前我还是傻傻分不清楚有什么区别;

很显然指针数组和数组指针是不同的。

指针数组:

例如:

char a[3][8]={"gain","much","strong"};

char *n[3]={"gain","much","strong"};

n[3]就是一个指针数组,很显然它本质上是一个数组,而数组中存放的元素是指针类型的,char表示存放的指针类型是字符型。

char * 是类型说明。其他也有 int *,float * 等等。

数组指针:

例如:

char c[2][3] = {"祖""国""好""好""祖""国"};    //因为一个汉字占用两个字节
char (*p)[3] = c ;
此时 p 就是数组指针,它存放的是字符数组c的地址;
具体的说它指向包含3个字符型(char)元素的一维数组;
*(p+i)是二维数组c[i][0]的地址;
*(p+2)+3表示c[2][3]地址(第一行为0行,第一列为0列),*(*(p+2)+3)表示c[2][3]的值
一般来说指针存放的是数组首元素的地址;

举例:

数组指针:

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

int (*p)[4];

p = a;

for(int i = 0; I < 3; i++)
{
    for(int j = 0; j < 4; j++)
  {
      printf("%d",p[i][j]); //或者 *(*(p+i)+j) 或者 *(p[i]+j)
  }

  printf("\n");
}

指针数组:
int ix=0;
int i=0;
int j=0;

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int *p[3];

for(ix; ix < 3; ix++)
{
    p[ix] = a[ix];
}

for(i; i < 3; i++)
{
    for(j = 0; j < 4; j++)//注意这里的j要赋值等于0,要不然只能输出第一行1234,达不到预期的效果
  {
      printf("%d",p[i][j]); //或者 *(*(p+i)+j) 或者 *(p[i]+j)
  }
  printf("\n");
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值