您的位置:首页 > 房产 > 家装 > 成都平面设计公司_seo+网站排名_google play官网入口_网络营销图片

成都平面设计公司_seo+网站排名_google play官网入口_网络营销图片

2025/1/23 9:22:35 来源:https://blog.csdn.net/2302_80281315/article/details/144322848  浏览:    关键词:成都平面设计公司_seo+网站排名_google play官网入口_网络营销图片
成都平面设计公司_seo+网站排名_google play官网入口_网络营销图片

一、指针数组(是数组)

1.定义:

指针数组是一个数组,只不过数组中存放的元素是某种类型的指针(一个指针数组里的指针类型要是一样的)。即数组的每个元素存放的是指向某个数据的内存地址。

2.语法格式:

类型* 数组名[数组大小];  
// 数组名 是一个包含数组大小个指针的数组,每个指针指向类型为 '类型' 的变量

例如:

int* arr[5];  
// arr 是一个包含 5 个指向int型数据变量的具体地址的指针构成的数组,每个指针指向一个 int 类型的变量

3.代码示例:

int* arr[5];  // arr 是一个包含 5 个指针的数组,每个指针都指向一个 int 类型的变量
int a = 10, b = 20, c = 30;
arr[0] = &a;  // arr[0] 指向 a
arr[1] = &b;  // arr[1] 指向 b
arr[2] = &c;  // arr[2] 指向 c
  • 定义arr 是一个数组,数组中有 5 个元素,每个元素都是 int* 类型的指针。
  • 访问:你可以通过 arr[i] 来访问数组中的每个指针,再通过 *arr[i] 来访问这些指针所指向的 int 类型变量。

二、数组指针(是指针)

1.理解:

  • 数组指针 通常是指一个指向数组的指针。换句话说,它指向整个数组,并且它存储的是整个数组的地址。
  • 数组指针知道数组的大小,所以它不仅仅是指向数组第一个元素的指针,而是一个指向“数组”的指针,能代表整个数组。

2.语法格式:

类型 (*指针名)[数组大小];  
// 指针名 是一个指向数组的指针,指向一个包含 '数组大小' 个 '类型' 元素的数组

例如:

int arr[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &arr;  // p 是一个数组指针,指向整个数组 arr

3.代码示例:

int arr[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &arr;  // p 是一个数组指针,指向包含 5 个 int 元素的数组
  • ptr 是一个指向整个数组的指针,不仅指向 arr[0],而是整个数组 arr。你可以通过 (*ptr)[0] 访问数组的第一个元素,(*ptr)[1] 访问第二个元素,以此类推。
    
    cout << (*p)[0];  // 输出 1,(*p)[0]可以访问数组的第一个元素cout << (*p)[1];  // 输出 2,(*p)[1]可以访问数组的第二个元素cout << (*p)[2];  // 输出 3,(*p)[2]可以访问数组的第三个元素cout << (*p)[3];  // 输出 4,(*p)[3]可以访问数组的第四个元素cout << (*p)[4];  // 输出 5,(*p)[4]可以访问数组的第五个元素//cout << (*p)[5];//错误使用  
    // 输出 0,(*p)[5]访问的是数组的第六个元素,但是数组只有五个元素,所以访问第六个元素会内存溢出

三、指向数组的指针(是数组指针的别名)

  • 指向数组的指针数组指针 实际上是同一个概念,都是指向整个数组的指针。它们指向数组的首地址,并且能够提供数组的大小信息,以及通常通过 (*ptr)[索引] 的方式来访问数组元素,因此,这两个术语是可以互换使用的。
  • 但是,如果非要区分:

    • 数组指针(Array Pointer)可能更侧重于强调“指向数组”这一概念,表示的是一个指针,指向一个数组。
    • 指向数组的指针(Pointer to an Array)更强调“指向数组的具体实现方式”,它是一个指针,指向整个数组的地址。

四、指向数组第一个元素的指针(指向数组第一个元素的地址的指针)

1.理解:

指向数组第一个元素的指针 是一个普通的指针,它指向数组的第一个元素。这个指针只知道数组第一个元素的地址,但它不包含数组的大小信息。

2.语法格式:

类型* 指针名 = 数组名;
//类型:数组元素的类型(如 int)。
//指针名:指向数组第一个元素的指针变量名。
//数组名:数组名本身代表数组首元素的地址。

3.代码示例:

#include <iostream>
using namespace std;int main() {int arr[5] = {1, 2, 3, 4, 5};// ptr 是指向数组第一个元素的指针,int* ptr = arr; //但是可以直接使用 ptr[0] 和 ptr[1] 来访问数组中的元素。std::cout << "数组第一个元素:" << ptr[0] << std::endl;  // 输出 1std::cout << "数组第二个元素:" << ptr[1] << std::endl;  // 输出 2return 0;
}

五、综合

1.对比

概念定义语法格式说明
指针数组(Array of Pointers)是一个数组,数组的每个元素都是一个指针,指向不同的数据(变量)的地址。类型* 数组名[数组大小];数组中的每个元素是一个指向其他数据类型的指针。
数组指针(Array Pointer)是一个指针,指向整个数组,存储数组的首地址,能够访问整个数组的元素。类型 (*指针名)[数组大小];指向的是数组的整个内容,不只是指向数组的第一个元素。
指向数组的指针(Pointer to Array)数组指针 其实是同一个概念,它是一个指针,指向整个数组,能够访问数组的元素。类型 (*指针名)[数组大小];数组指针 完全相同,指向整个数组的首地址。
指向数组第一个元素的指针(Pointer to the First Element)是一个普通指针,指向数组的第一个元素。类型* 指针名 = 数组名;指向数组的第一个元素地址,只知道元素的地址,不知道数组的大小。
区别项指针数组数组指针 / 指向数组的指针指向数组第一个元素的指针
指向的对象是一个数组,每个元素都是一个指针,指向其他数据。是一个指向整个数组的指针,指向的是整个数组。是一个指向数组第一个元素的指针,只知道第一个元素的地址。
语法格式类型* 数组名[数组大小];类型 (*指针名)[数组大小];类型* 指针名 = 数组名;
访问方式使用 数组名[索引] 访问数组中指针的地址,指针名[索引] 访问指向的数据。使用 (*ptr)[索引] 来访问数组元素。直接使用 ptr[索引]*ptr 来访问数组元素。
存储的内容每个元素是一个指针,指向不同的数据(变量、数组等)。存储的是数组的首地址,可以通过 (*ptr)[索引] 来访问数组元素。存储的是数组第一个元素的地址,无法直接知道数组的大小。
是否知道数组大小不知道数组大小,指向的是指针数组中的元素。知道数组大小,能够通过指针访问整个数组。不知道数组大小,只能通过指针访问数组的元素。
实际应用用于存储多个指向不同数据的指针,如字符串数组等。用于存储指向整个数组的指针,能够通过指针访问整个数组。用于访问数组的第一个元素,通常用在函数中处理数组的情况。

2.完整的代码示例:

1.指针数组:

#include <iostream>int main() {int a = 10, b = 20, c = 30;int* ptrArr[3];  // ptrArr 是一个指针数组,包含 3 个指针ptrArr[0] = &a;ptrArr[1] = &b;ptrArr[2] = &c;std::cout << "*ptrArr[0]: " << *ptrArr[0] << std::endl;  // 输出 10std::cout << "*ptrArr[1]: " << *ptrArr[1] << std::endl;  // 输出 20std::cout << "*ptrArr[2]: " << *ptrArr[2] << std::endl;  // 输出 30return 0;
}

2.数组指针/指向数组的指针:

#include <iostream>int main() {int arr[5] = {1, 2, 3, 4, 5};int (*ptr)[5] = &arr;  // ptr 是一个指向数组的指针,指向整个数组 arrstd::cout << "(*ptr)[0]: " << (*ptr)[0] << std::endl;  // 输出 1std::cout << "(*ptr)[1]: " << (*ptr)[1] << std::endl;  // 输出 2return 0;
}

3.指向第一个元素的指针:

#include <iostream>int main() {int arr[5] = {1, 2, 3, 4, 5};int* ptr = arr;  // ptr 是指向数组第一个元素的指针std::cout << "ptr[0]: " << ptr[0] << std::endl;  // 输出 1std::cout << "ptr[1]: " << ptr[1] << std::endl;  // 输出 2return 0;
}

3.总结

  • 指针数组 是一个数组,数组的每个元素是一个指针,指向不同的数据。
  • 数组指针 / 指向数组的指针 是同一个概念,指向一个完整的数组,并且可以通过指针访问数组中的每个元素。
  • 指向数组第一个元素的指针 是一个普通指针,指向数组的第一个元素。

PS:这篇文章讲的是C++里的传统的C风格数组,C++特有的std::arry数组等考完试有空再出一期有关的文章!祝大家学业顺利!一起进步!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com