首页 > 编程语言 >1.C++基础知识—指针篇

1.C++基础知识—指针篇

时间:2024-11-20 14:18:58浏览次数:3  
标签:10 arr 指向 int C++ 基础知识 数组 指针

#指针#变量#

1.一个整型数  int number;

2.一个指向整型数的指针  int*  ptrToInt;

3.一个指向指针的指针,它指向的指针是指向一个整型数 int** ptrToPtrToInt;

4.一个有10个整型数的数组 int arry[10];

5.一个有10个指针的数组,该指针是指向一个整型数的 int* ptrArray[10];

6.一个指向有10个整型数数组的指针 int (*arryPtr)[10];

eg:  int arr[10] = {0,1,2,3,4,5,6,7,8,9}; 那么就可以定义 int (*arryPtr)[10] = &arr;

int main() {
    int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};  // 定义一个包含10个整数的数组
    int (*arrayPtr)[10] = &arr;  // 声明一个指向数组的指针,并初始化为指向arr

    // 通过指针访问数组元素
    for (int i = 0; i < 10; i++) {
        printf("%d ", (*arrayPtr)[i]);  // 等价于 arr[i]
    }
    printf("\n");

    return 0;
}

那这个指针还可以怎么用呢,既然(*arrayPtr)[i]和arr[i]等价,那么为什么我们不直接用arr[i],

下面大概说一下这样写的用处。

a)直接通过数组索引访问 int value = arrayPtr[0][3];  //访问第一个数组的第4个元素,从0索引。

b)  使用解引用和索引访问  int  value = (*arrayPtr)[3]l;  

c)  遍历数组

for(int i; i<10 ; ++i)  {    std::cout<< (*array)[i]<<endl;  }

d)指针运算  int (*nextArrayPtr)[10] = arrayPtr + 1; // 移动到下一个数组(假设内存是连续的)

e)函数参数 这在处理动态数组或需要修改数组内容的函数时非常有用

void processArray(int (*arrPtr)[10]) {
    for (int i = 0; i < 10; ++i) {
        // 对数组元素进行某种处理
        std::cout << (*arrPtr)[i] << " ";
    }
    std::cout << std::endl;
}

int main() {
    int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int (*arrayPtr)[10] = &arr;
    processArray(arrayPtr);
    return 0;
}

f)动态内存分配  可以使用这种类型来管理动态分配的数组:

int (*dynamicArrayPtr)[10] = new int[5][10]; // 分配5个数组,每个数组包含10个整数
// 使用dynamicArrayPtr...
delete[] dynamicArrayPtr; // 释放内存

为了加深理解 我们更进一步 看一下指向多维数组的指针。

g)指向二维数组的的指针定义以及初始化

int arr[4][5] = {
    {1, 2, 3, 4, 5},
    {6, 7, 8, 9, 10},
    {11, 12, 13, 14, 15},
    {16, 17, 18, 19, 20}
};

int (*arrayPtr)[5] = arr; // 指向包含5个整数的4个数组

在这里,arrayPtr 是一个指针,指向一个包含5个整数的数组,也就是指向二维数组的第一行

 h)动态分配二维数组

int** dynamicArr = new int*[4];
for (int i = 0; i < 4; ++i) {
    dynamicArr[i] = new int[5];
}

// 使用 dynamicArr 作为二维数组
// ...

// 释放动态分配的内存
for (int i = 0; i < 4; ++i) {
    delete[] dynamicArr[i];
}
delete[] dynamicArr;

这些是指向数组的指针的一些基本用法。它们在处理数组、特别是多维数组或动态分配的数组时非常有用。通过这种方式,你可以更灵活地操作数组,同时保持代码的清晰和简洁。

好了我们接着看 

7.一个指向函数的指针,该函数有一个整型参数并返回一个整型数;

int* (funcptr) (int);

8.一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

int (*funcPtrArray[10])(int);

标签:10,arr,指向,int,C++,基础知识,数组,指针
From: https://blog.csdn.net/wahahshdjdjdn/article/details/143904530

相关文章

  • C++基础知识-const篇
    1.const作用在C++中,const 关键字用于定义常量,确保某些数据不会被修改。const的作用包括但不限于以下几点:1.定义常量值:  const 可以用来定义不会改变的常量值  constintMAX_USERS=100;2.修饰指针:  const可以修饰指针,以限制指针指向的数据是否可以被修改......
  • 【c++笔试强训】(第十六篇)
    目录游游的⽔果⼤礼包(枚举)题目解析讲解算法原理编写代码买卖股票的最好时机(⼆)(贪⼼)题目解析讲解算法原理编写代码游游的⽔果⼤礼包(枚举)题目解析1.题目链接:登录—专业IT笔试面试备考平台_牛客网2.题目描述题目描述游游有nnn个苹果,mmm个桃子。她可以把2个苹......
  • (2024最新毕设合集)基于SpringBoot的校园共享厨房信息系统-72647|可做计算机毕业设计JAV
    目 录摘要第一章 绪论1.1选题背景与意义1.2研究现状1.3论文结构与章节安排第二章系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3操作可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系统用例分......
  • C++(构造函数和创建类对象)
    一)构造函数的概念构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的数据成员。它的主要目的是确保对象在使用前被正确地初始化,使得对象处于一个合理的初始状态。构造函数的名称与类名相同,没有返回类型(包括void)。例如,对于一个名为MyClass的类,其构造函数可以写成MyClass()......
  • C++ 之 VS2010 和MySQL数据库的链接问题
    目录代码#include<winsock.h>#include#include#include<mysql.h>usingnamespacestd;#pragmacomment(lib,"ws2_32.lib")#pragmacomment(lib,"libmysql.lib")//单步执行,不想单步执行就注释掉#defineSTEPBYSTEPintmain(){cout<<&q......
  • c语言初学者练习——指针进阶学习
    c语言初学者练习——结构体一、字符指针在指针的类型中有一种指针类型为字符指针:char*字符指针的一般使用方法:intmain(){ chara='w'; char*pc=&a; *pc='b'; printf("%c",a); return0;}另一种使用方法:把字符串首字符a的地址赋值给了p,但不安全VS......
  • 针对初学者的C和C++23的对比学习-4.循环结构的学习
    4.循环结构的学习学习目标:学习内容:了解for语句:for循环的执行流程了解while语句:while循环的执行流程了解dowhile语句:dowhile循环的执行流程了解break和continue的使用for,while和dowhile的对比练习学习目标:了解循环结构了解for语句了解while语句了解d......
  • C++语言之模版与类型转换
    模版C++的泛型编程可以将数据类型作为参数进行传递关键字:    C++模版的语法使用"<>"来表示泛型类型,并使用关键字template来定义和声明模版分类:    模版函数    模版类模版函数语法:    template<class假设的类型1,class假设......
  • 《C++ 构建区块链:创世区块的初始化之道》
    在区块链这个神秘而充满魅力的技术领域中,用C++构建区块链是一项极具挑战性和创新性的工作。而其中,初始化创世区块是整个区块链大厦的基石,它承载着区块链的起源和根本属性,就像生命起源中的第一个细胞一样重要。今天,我们就来深入探讨一下在C++构建区块链时,如何进行创世区......
  • 《C++ 实现区块链:区块时间戳的存储与验证机制解析》
    在区块链这个复杂而精妙的技术架构中,时间戳是一个至关重要的元素,尤其当我们使用C++来实现区块链时,对区块时间戳的存储和验证机制设计更是不容忽视。这一机制如同区块链的时间脉搏,为整个系统的有序运行和数据可信性提供了坚实的保障。时间戳在区块链中的核心意义时间戳在......