指针数组和数组指针的区别

(一)何为指针数组?
指针数组的本质上就是一个数组,其英文的解释为array of pointers,即用于存储指针的数组,说白了就是一个数组里面放着一堆的指针。
例如:char*a[4] 的含义为存在一个数组,这个数组里面存放着4个char* 类型的指针。

#include<stdio.h>
#include<string.h>
#include<malloc.h>

int main(void)
{
  char *array[4];
  for(int i = 0;i < 4 ;i++)
  {
    //array[i]其指向的地址是的一个未知的地址,很多情况下为NULL地址,
    //所以要使用array[i]指针,那么就必须为其分配地址
    array[i] = (char *)malloc(sizeof(char) * 64);
    sprintf(array[i],"%s%d","array",i);
  }

  for(int i = 0;i < 4 ;i++)
  {
    printf("%s\n",array[i]);

    //释放内存
    free(array[i]);
  }

}

(二)何为数组指针
数组指针的本质上就是一个指针,其英文的解释为a pointer to an array,说白了就是指向一个数组的指针。
例如 char(a)[4]的含义为存在一个(或多个)类型的char()[]指针指向了一个(或多个)长度为4 char型数组。

#include<stdio.h>
#include<string.h>
#include<malloc.h>

int main(void)
{
  char (*pointer_to_arr)[64] = NULL;

  pointer_to_arr = (char(*)[]) malloc(sizeof(char[64]) * 10);

  for(int i = 0;i < 10;i++)
  {
    sprintf(*(pointer_to_arr+i),"%s%d","array_to_pointer",i);
    printf("%s\n",*(pointer_to_arr+i));
  }

  free(pointer_to_arr);

  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值