指针数组是什么意思_下标要求数组或指针类型

指针数组是什么意思_下标要求数组或指针类型顾名思义:指针类型的数组,首先是一个数组,数组元素存储的是指针

顾名思义:指针类型的数组,首先是一个数组,数组元素存储的是指针。(中国的修饰词往往都在前面,而西方修饰词往往是放在后面)

指针数组是什么意思_下标要求数组或指针类型

语法如下:

目标类型 数组名称[元素个数]

如:int * p[3] 数组p有3个元素,每个元素存储的都是指针类型

int a[] = {1, 3, 5}; //定义数组a

int* p[3]; //定义指针数组p,有三个元素,每个元素存储都是指针类型

p[0] = a; //或 &a[0]

p[1] = &a[1]; //或 a+1

p[2] = a + 2; //或 &a[2]

为什么 &a[0]和a是等价的呢?因为a在表达式中会转换为数组a首元素的首地址。

此时:

*p = *(p+0) = p[0] = a = &a[0] 这5个都是同数组a的首元素地址,只要用*号对它们运算,即得到数组第一个元素的值1

**p = *(*(p+0)) = *[p0] = *a = *(&a[0]) 这5个结果都是数值1


#include <stdio.h>
/*
时间:2022-04-28 15:31
作者:sgbl888
功能:指针数组
知识点:
    1、指针类型的数组,首先是数组,数组元素存储的都是指针
    2、数组名在表达式中会转换为数组首元素的首地址
    3、对数组名使用sizeof关键字或对数组名取地址 &数组名 不会转换首元素的首地址
*/
int main(){
    int a[] = {1, 3, 5};
    int *p[3]; //[]符高于其它运算符,p先与[3]组合。因此p[3]是一个有3个元素的int*(整型指针)的数组。简单点是就数组里面存储的都是指针类型
    p[0] = a; //或 a
    p[1] = a+1; //或 a+1
    p[2] = a+2; //或 a+2

    printf("p[3] sizeof: %zd Byte\n", sizeof p); //p三个元素都是int*指针,在64位系统占用8字节,三个元素共占用24个字节

    printf("%p %p %p\n", &a[0], &a[1], &a[2]); //打印三个元素的地址
    printf("%p %p %p\n", p[0], p[1], p[2]); //都是指向数组a的各个元素
    printf("%p %p %p %p %p\n", *p, *(p+0), p[0], a, &a[0]); //结果都是数组第一个元素的首地址
    printf("%d %d %d %d %d\n", **p, *(*(p+0)), *p[0], *a, *(&a[0])); //结果都是数值1

    return 0;
}

今天的文章指针数组是什么意思_下标要求数组或指针类型分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/71388.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注