C语言中的指针数组和数组指针

可以将 *string看成数组 a[] 下的a,即指针是指向数组的首地址的;

指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。

指针数组( * stings[] )

c中指针可以作数组使用比如:

int a[] = "hello world";
int *p;
p = a;
printf("%c", *p++);
printf("%c", p[1]);   //利用数组形式输出
数组不一定能作指针用比如:
int a[] = "hello world";
printf("%c", *a++);   //这里不能改变数组的地址,会报错


这时会报错,你不能改变数组的地址;

但是可以这样使用:

int a[] = "hello world";
printf("%c", *(p+1));         //没有改变数组地址,可行

在指针数组中如下代码:

#include<stdio.h>
int main(void)
{
    char **p, i;
    char *strings[] ={
        "one",
        "two",
        "three"
    };
    p=strings;                     //strings是地址的地址,所以要定义**p
    for(i=0; i<3; i++)
        printf("%s\n", *(p++));    //这里*(p++)是取出存储在数组中的每一个字符串的地址
    return 0;
}

这里创建了一个指针数组strings,它的每个数组元素相当于一个指针变量,都可以指向一个整形变量,其值为地址。也就是说strings数组中每个元素存放的是字符串的地址。

这里可以将指针数组看成 * (strings[1])之类,后面的那部分 strings[1] 看成指针变量 p.

数组指针( (*strings)[] )

数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[10]; p即为指向数组的指针,又称数组指针。

int a[4][5];
int (*p)[5]=a;

这里所代表的 *(p+i) 是二维数组a[i][0]的地址。












  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值