C++ — 指针和数组的关系?

这篇具有很好参考价值的文章主要介绍了C++ — 指针和数组的关系?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在本文中,您将了解数组与指针之间的关系,并在程序中有效地使用它们。

指针是保存地址的变量。指针不仅可以存储单个变量的地址,还可以存储数组单元的地址。

看以下示例:

int* ptr; // 定义指针变量ptr
int a[5];
ptr = &a[2];  // &a[2]是a[5]这个数组的第三个元素的地址。

        假设指针需要指向数组的第四个元素,即在上述情况下的第四个数组元素的保存地址。由于ptr指向上面示例中的第三个元素,ptr + 1将指向第四个元素。您可能会认为,ptr +1为您提供了ptr的下一个字节的地址。 但这是不正确的。这是因为指针ptr是指向int的指针,并且int的大小对于操作系统是固定的(64位操作系统中int类型大小是4字节)。 因此,ptr和ptr +1之间的地址相差4个字节。如果指针ptr是指向char的指针,那么ptr和ptr + 1之间的地址将相差1个字节,因为一个字符的大小是1个字节。

示例1:C ++指针和数组

C ++程序使用数组和指针显示数组元素的地址


#include <iostream>

int main() {
	float arr[5]; // 定义浮点型数组
	float* ptr; // 定义一个浮点型指针变量ptr
	std::cout << "使用数组显示地址:" << std::endl;
	for (int i = 0; i < 5; i++) {
		std::cout << "&arr[" << i << "]=" << &arr[i] << std::endl;
	}
	ptr = arr; // 将arr数组的首地址赋给指针变量ptr
	std::cout << "\n使用指针显示地址" << std::endl;
	for (int i = 0; i < 5; i++) {
		std::cout << "ptr+" << i << "=" << ptr + i << std::endl;
	}
	
	
	return 0;
}

输出结果为: (结果不唯一)

C++ — 指针和数组的关系?,C++,c++,开发语言

        在上面的程序中,使用不同的指针ptr来显示数组元素arr的地址。但是,数组元素可以通过使用相同的数组名arr来使用指针表示法来访问。例如:

int arr[3];

&arr[0] 等同于 arr
&arr[1] 等同于 arr + 1
&arr[2] 等同于 arr + 2

代码如下: 


#include <iostream>

int main() {
	int arr[3];
	std::cout << "&arr[0]的值为:"<< &arr[0] << std::endl;
	std::cout << "arr的值为:" << arr << std::endl;
	std::cout << "&arr[1]的值为:" << &arr[1] << std::endl;
	std::cout << "arr+1的值为:" << arr +1 << std::endl;
	return 0;
}

         运行上述程序,得到结果如下(结果不唯一,这是因为每次运行时给数组分配的地址不一样):

C++ — 指针和数组的关系?,C++,c++,开发语言

 

示例2:指针和数组

C ++程序使用指针符号显示数组元素的地址。

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
    cout<<"使用指针符号显示地址: "<< endl;
    for (int i = 0; i < 5; ++i) {
        cout << arr + i <<endl;
    }

    return 0;
}

输出结果:(结果不唯一) 

C++ — 指针和数组的关系?,C++,c++,开发语言

        您知道,指针ptr保存地址,而表达式*ptr给出存储在地址中的值。类似地,可以使用*(ptr + 1)获取存储在指针ptr + 1中的值。

请考虑以下代码:

int ptr[5] = {3, 4, 5, 5, 3};
  • &ptr[0]等于ptr,*ptr等于ptr[0]

  • &ptr[1]等于ptr + 1,*(ptr + 1) 等于ptr[1]

  • &ptr[2]等于ptr + 2,*(ptr + 2)等于ptr[2]

  • &ptr[i]等于ptr + i ,*(ptr + i)等于ptr[i]

验证代码如下: 

#include <iostream>

int main() {
    int arr[5] = { 1,3,9,8,5 };
    int* ptr; // 定义一个int类型的指针变量ptr
    ptr = arr;
    std::cout << "arr[0]=" << arr[0] << std::endl;
    std::cout << "*ptr=" << *ptr << std::endl;
    std::cout << "arr[1]=" << arr[1] << std::endl;
    std::cout << "*(ptr+1)=" << *(ptr + 2) << std::endl;
    std::cout << "arr[2]=" << arr[2] << std::endl;
    std::cout << "*(ptr+2)=" << *(ptr + 2) << std::endl;
    return 0;
}

输出结果: 

C++ — 指针和数组的关系?,C++,c++,开发语言

 注意:*ptr+1 与 *(ptr+1) 是有区别的,区别如下:(假设ptr指向arr数组的地址)

*ptr+1 :ptr存放的内容是arr数组的地址,即arr数组中第一个元素的地址,*ptr存放的内容是arr数组中第一个元素的值,则*ptr+1表示在第一个元素的值的基础上加1。
*(ptr+1):同样,ptr存放的内容是arr数组的地址,即arr数组中第一个元素的地址,ptr+1存放的内容是arr数组中第二个元素的地址,则*(ptr+1)存放的是第二个元素的值。

验证代码如下:

#include <iostream>

int main() {
    int arr[5] = { 1,3,9,8,5 };
    int* ptr; // 定义一个int类型的指针变量ptr
    ptr = arr;
    std::cout << "arr[1]=" << arr[1] << std::endl;
    std::cout << "*(ptr+1)=" << *(ptr + 1) << std::endl;
    std::cout << "*ptr+1=" << *ptr + 1 << std::endl;
    return 0;
}

输出结果: 

C++ — 指针和数组的关系?,C++,c++,开发语言

        上述代码中, arr数组为一个可以存放5个int类型数据的一维数组,且5个元素分别为:1,3,9,8,5。
        我们定义了一个int类型的指针变量ptr,并且将arr数组的地址,即第一个元素的地址赋给ptr,则有*(ptr+1)存放的是arr数组中第二个元素3,而*ptr存放的是arr数组中第一个元素1,那么*ptr+1就为2。

示例3:C ++指针和数组

C ++程序,用于插入和显示使用指针符号输入的数据。

#include <iostream>
using namespace std;

int main() {
    float arr[5];

    // 使用指针符号插入数据
    cout << "输入5个数字: ";
    for (int i = 0; i < 5; i++) {
        cin >> *(arr + i);
    }

    // 使用指针符号显示数据
    cout << "显示数据: " << endl;
    for (int i = 0; i < 5; i++) {
        cout << *(arr + i) << endl;
    }

    return 0;
}

输出结果: 

C++ — 指针和数组的关系?,C++,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-727944.html

到了这里,关于C++ — 指针和数组的关系?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [开发语言][python][c++]:C++中的this指针和Python中的Self -- 26岁生日

    以朋友的新岁祝福开篇,祝笔者也祝大家☺️: 之前一直对 C++ 中的 this 和 python 中的 self 到底是什么关系,为什么 C++ 要显式的写出来,python 则不需要? 模糊不清,趁着周末整理一下相关结论,希望本篇文章可以解答这些问题,同时对C++和Python中的类加深些理解。 python 当

    2024年01月24日
    浏览(71)
  • C++【4】指针与引用;数组指针;指针数组

    /*     指针变量作为函数参数         函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。         指针变量作为函数参数与变量本身作为函数参数不同,变量作函数参数传递的是具体值。         而指针作为函数参数传递的是内存的地址

    2024年02月07日
    浏览(38)
  • 【C语言进阶】指针数组 —— 数组指针

    🎬 鸽芷咕 : 个人主页  🔥 个人专栏 : 《C语言进阶篇》 《C语言初阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,前面我们已经把指针大部分内容给学完了,今天就给大家带来数组指针or指针数组!    ⛳️ 很多说这俩名字不是差不

    2024年02月14日
    浏览(38)
  • C语言 ——指针数组与数组指针

    目录 一、二维数组 二、指针数组 (1)概念  (2)书写方式 (3)指针数组模拟二维数组 三、数组指针 (1)概念 (2)使用数组指针打印一维数组  (3)模拟二维数组的传参 首先,我们要理解一下二维数组和指针变量之间的一些相关概念。 二维数组 : int arr [ 3 ][ 5 ]  

    2024年02月13日
    浏览(50)
  • C语言--指针详解(下)--字符指针、数组指针、指针数组、函数指针、函数指针数组(转移表)

    在C语言中有一种指针类型为字符指针 char*,常用其来表示字符,使用如下: 除了上述用法之外,还可以有以下的用法: 在上面的代码中,字符 \\\" hello word \\\"是常量字符串,将\\\"hello word\\\"放入 pstr 指针的实质是将第一个字符 “ h \\\" 的地址传递给了 pstr ,通过首字符 ” h \\\" 就可以访问

    2024年02月03日
    浏览(51)
  • 【go语言基础】指针数组和数组指针

    (1)指针数组: 存储指针的数组,也叫存储地址的数组,简单说就是存储地址的。 首先它是一个数组,数组中的元素都是指针(地址)。 (2)数组指针: 首先它是一个指针,存储的是指向数组的指针。 (1)指针数组 定义: 注意:首先是一个数组,将数组中的元素定义为

    2024年02月13日
    浏览(52)
  • c语言中指针与函数的关系

    2024年02月05日
    浏览(38)
  • 【C语言】指针的基本知识详细讲解(指针数组、数组指针、函数指针....

    接着上次的函数的基本知识,今天我们来讲一讲🔍指针 目录 一、指针的概念 二、指针变量 三、野指针 四、字符指针 五、指针与数组 六、指针数组 七、数组指针  八、指针与函数 总结 一、指针的概念 1.1、变量和地址 所谓指针,也就是内存的地址;所谓指针变量,也就是

    2023年04月08日
    浏览(41)
  • C语言:指针和数组(看完拿捏指针和数组)

    目录 数组名的理解: 一维数组:  解析:  字符数组:  解析:   解析: 字符串数组:  解析:   解析:  一级指针:   解析:   解析:  二维数组:  解析:  指针笔试题: 题一:一维数组 题二: 结构体指针 题三: 一维数组 题四: 二维数组 题五: 二维数组 题

    2024年02月11日
    浏览(43)
  • 【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

    在学习C语言的过程中,理解指针的概念是非常重要的。指针提供了一种直接访问内存地址的方式,使得我们可以更加灵活地管理数据和内存。在本文中,我们将介绍C语言中的二级指针、一维数组与指针,并通过通俗易懂的语言和示例代码来帮助读者理解这些概念。 二级指针

    2024年02月05日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包