首页 > 其他分享 >二级指针与const

二级指针与const

时间:2023-06-01 17:35:06浏览次数:50  
标签:二级 rows const int cols ++ array 指针

二维数组分配:

#include <iostream>

int main() {
  int rows = 3;
  int cols = 4;
  // 使用二级指针创建一个动态分配的二维数组
  int **array = new int*[rows];
  for (int i = 0; i < rows; i++) {
    array[i] = new int[cols];
  }
  // 给数组赋值
  int count = 0;
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      array[i][j] = count++;
    }
  }
  // 打印数组
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      cout << array[i][j] << " ";
    }
    cout << endl;
  }
  // 释放内存
  for (int i = 0; i < rows; i++) {
    delete[] array[i];
  }
  delete[] array;

  return 0;
}

采用智能指针:

#include <iostream>
#include <memory>

int main() {
  int rows = 3;
  int cols = 4;

  // 使用 std::unique_ptr 创建一个二维数组
  auto array = std::make_unique<std::unique_ptr<int[]>[]>(rows);
  for (int i = 0; i < rows; i++) {
    array[i] = std::make_unique<int[]>(cols);
  }

  // 给数组赋值
  int count = 0;
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      array[i][j] = count++;
    }
  }

  // 打印数组
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      std::cout << array[i][j] << " ";
    }
    std::cout << std::endl;
  }

  return 0;
}

使用 std::array 创建数组

#include <iostream>
#include <memory>

int main() {
  int rows = 3;
  int cols = 4;

  // 使用 std::unique_ptr 创建一个二维数组
  auto array = std::make_unique<std::unique_ptr<int[]>[]>(rows);
  for (int i = 0; i < rows; i++) {
    array[i] = std::make_unique<int[]>(cols);
  }

  // 给数组赋值
  int count = 0;
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      array[i][j] = count++;
    }
  }

  // 打印数组
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      std::cout << array[i][j] << " ";
    }
    std::cout << std::endl;
  }

  return 0;
}

二级指针与 const

#include <iostream>

int main() {
  int x = 5;
  int y = 10;

  int *p1 = &x;
  int *const *p2 = &p1; // p2 是一个指向常量指针 p1 的指针

  *p2 = &y; // 错误:不能修改常量指针 p1 的值
  **p2 = 20; // 正确:可以修改 p1 指向的值

  const int **p3 = &p1; // p3 是一个指向指向常量整数的指针的指针

  *p3 = &y; // 正确:可以修改 p1 的值
  **p3 = 20; // 错误:不能修改常量整数的值
  char x = 'A';
  char y = 'B';

  char const* p1 = &x;
  char const*const* a = &p1;
  // 这里也可以写为 const char *const* a = &p1;

  std::cout << **a << std::endl; // 输出 'A'

  // *a = &y; // 错误:不能修改常量指针 p1 的值
  // **a = 'C'; // 错误:不能修改常量字符 x 的值

   return 0;
}

标签:二级,rows,const,int,cols,++,array,指针
From: https://www.cnblogs.com/hacker-dvd/p/17449669.html

相关文章

  • c++ const详解
    可以使用const的地方就尽量使用const一般引用的类型必须与其所引用对象的类型一致,但是允许一个常量引用绑定到非常量的对象、字面值,甚至是一个一般表达式doublea=42.0;int&b=a;//编译错误,一般引用类型需要与所引用对象类型一致inta=42;constint&b=a;a=......
  • 双指针算法模板和一些题目
    什么是同向双指针?什么是相向双指针?双指针的鼻祖题——两数之和TwoSum链表上的快慢指针算法快速排序&归并排序 同向双指针•相向双指针•几乎所有TwoSum变种•Partition•QuickSelect•分成两个部分•分成三个部分•一些你没听过的(但是面试会考的)......
  • C++指针需要知道的小细节
    一、定义和赋值一个普通对象intival=1024;如上述代码所示,将ival定义为一个int对象,并给予初始值1024。二、指针对象的声明int*pi;1、如上述代码所示,当定义/声明某个特定类型的指针时,要在类型名称后加一个*号。2、在这里,pi是int类型对象的指针。三、指针的初始值int*......
  • 列举某域名下所有二级域名的方法
    这里介绍三种列举某域名下所有二级域名的方法1、命令行下列举此方法好像是hoky很久以前写的,不过原文步骤有点乱,我又重新整理了一下,以我们小组的站为例C:\DocumentsandSettings\鬼仔>nslookup***Can'tfindservernameforaddress202.102.224.68:Serverfailed***Can'tfi......
  • 多线程或监听器@Autowired注入null空指针
    //问题:在多线程中使用@Autowired注入IUserService时,userService使用时为null,获取不到bean//原因:newthread不在spring容器中,也就无法获得spring中的bean对象;@AutowiredprivateIUserServiceuserService;//解决:手动获取bean对象privateIUserServiceuserService=AppCo......
  • C/C++杂记:深入理解数据成员指针、函数成员指针
    1.数据成员指针对于普通指针变量来说,其值是它所指向的地址,0表示空指针。而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示。例:代码示例:structX{inta;intb;};#defineVALUE_OF_PTR(p)(*(long*)&p)int......
  • 计算机二级学院 名称大全
    计算机二级学院 数学与计算机科学学院、物理与信息科学学院、工程与设计学院和计算机教学部计算机与软件学院  软件学院  计算机与信息学院计算机学院计算机与科学工程学院计算机科学与技术学院(计算机科学技术学院)计算机与信息科学学院计算机与信息技术学院计......
  • 虚表指针初始化顺序
    无继承时:1、分配内存2、初始化列表之前赋值虚表指针3、列表初始化4、执行构造函数体有继承时:1、分配内存2、基类构造过程(按照无继承来)3、初始化子类虚表指针4、子类列表初始化5、执行子类构造函数体Q:虚表指针在初始化列表之前被赋值,可以放在初始化列表之后赋值吗?即顺......
  • spring boot 集成 swagger 空指针异常
    刚开始使用的是2.6.4的springboot集成的是swagger3,启动时报npe百度了一下可能是版本不兼容,说swagger3适用2.4以上,我心想这也没错哇,,又百度了一下说版本高也不行只能是2.5.7以下原文链接:https://blog.csdn.net/qq_53860947/article/details/124411891 2023-05-18......
  • 下拉框二级联动
    https://1x.antdv.com/components/cascader-cn/ <a-cascaderref="cascader"#钩子:allowClear="false"style="height:30px":options="depList":load-data="loadData"......