二维数组、指针详解

article/2025/8/21 19:16:17

二维数组、指针详解:

目录

二维数组、指针详解:

1.研究二维数组的表示。

2.现在研究关于二维数组和指针的关系


1.研究二维数组的表示。

首先,用代码运行进行测试,验证的相关结果,

// C.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <iostream>
using namespace std;int main()
{int a[3][4] = { { 1,  3,  5,  7},{ 9, 11, 13, 15}, {17, 19, 21, 23}};cout <<"   a    "<< endl;cout << a << endl << endl;cout << "   a[0]           *(a+0)          *a" << endl;cout << a[0] << "        " << *(a+0) << "        " << *a << endl << endl;cout << "   &a[1]           a + 1       " << endl;cout << &a[1] << "        " << a + 1 << endl << endl << endl;cout << "   a[1]           *(a + 1)       " << endl;cout << a[1] << "        " << *(a + 1) << endl << endl;cout << "   a[1] + 2        *(a + 1) + 2       " << endl;cout << a[1] + 2 << "        " << *(a + 1) + 2 << endl << endl << endl;cout << " *(a[1] + 2)      *(*(a + 1) + 2)       " << endl;cout <<"   "<<    *(a[1] + 2) << "               " << *(*(a + 1) + 2) << endl << endl;return 0;
}

得到结果:

由此可以得出如下结果【仔细看清池一下的表格】:

虽然打印出来的结果一样,但是其含义不同,其数据类型可能不一样。且指针接收的值,不是说传递一个地址进去就可以得。还要其类型对应的上。指针之所以为派生类型,是因为其必须依靠基本数据类型才能够使用(参见本人的这篇博客数据类型、存储结构、static、extern)。

二维数组a有关的指针
 含义

地址

数据类型
a二维数组名,指向一维数组a[0],即0行的首地址008FFAA4int (*)[4]
a[0],  *(a+0), *a0行0列的地址008FFAA4int *
&a[1],  a+11行首地址 008FFAB4int (*)[4]
a[1],  *(a+1)1行0列元素,a[1][0]的地址 008FFAB4int *
a[1]+2,  *(a+1)+21行2列元素,a[1][2]的地址008FFABCint *
*(*a[1]+2),  *(*(a+1)+2)1行2列元素,a[1][2]的值13 

 

 

 

 

 

 

 

2.现在研究关于二维数组和指针的关系

怎么赋初值呢? 给一个二维数组。

正确赋值方式:

方式一:int(*p)[4] = a; 

方式二:int(*p)[4] = &a[0];


容易错误的方式

错误一:int(*p)[4] = a[0];     

  

错误二:int(*p)[4] = &(a[0][0]);

那么由此可以得出结论,重点来了,敲黑板!!!【可以参考C程序设计 p250】
a[0], a[1], a[2]的类型为 int * 类型(指向整型变量);

而a的类型为 int (*)[4],指向 含有四个元素的 一维数组。

感觉此表比较重要,重点是容易理解。再回顾一遍。[和上面的是同一个表]

 

然后柑橘自己理解的,先要进一步提高的,可以参看下一篇文章,指向成员的指针运算符 .* 与 ->* 的区别。已确定自己是真的理解了。

注意!!!

注意!!!

注意!!!

要理解这两者之间的关系,关键是要自己能够理解:

关键在于弄清楚指针和数组对应的相应是几级指针对应几维数组。

关键在于弄清楚指针和数组对应的相应是几级指针对应几维数组。

关键在于弄清楚指针和数组对应的相应是几级指针对应几维数组。


http://chatgpt.dhexx.cn/article/E6qFPHmG.shtml

相关文章

二维数组与指针

转载自&#xff1a;https://www.cnblogs.com/chenyangyao/p/5222696.html 声明&#xff1a;本文为原创博文&#xff0c;如有转载&#xff0c;请注明出处。若本文有编辑错误、概念错误或者逻辑错误&#xff0c;请予以指正&#xff0c;谢谢。 指针与数组是C/C编程中非常重要的元…

二维数组指针,指针数组与数组指针的区别,一看就懂

目录 一.二维数组基本概念 二.指针数组和数组指针的区别 1.数组指针 2.指针数组 3.总结 三.二维数组的首地址和数组名 四.二维数组如何运用指针&#xff1f; 五.代码分析,加深了解。 一.二维数组基本概念 二维数组在概念上是二维的&#xff0c;有行和列&#xff0c;但在…

二维数组与数组指针详解

二维数组 深入理解二维数组 首先定义一个二维数组 int a[2][3]{{1,2,3},{4,5,6}}; #or int a[2][2]{1,2,3,4};新的理解&#xff1a;我们可以这样认为&#xff0c;a可以看作是一个一维数组&#xff0c;包含2个元素&#xff0c;每个元素恰好是包含3个整型的元素&#xff0c;a这个…

c语言——二维指针数组

1 一维度数组与指针 1.1一维数组元素在内存分布 #include<stdio.h> #include<stdlib.h> #include<string.h>#define ARRAY_SIZE 8void main() {int data[ARRAY_SIZE]{0,1,2,3,4,5,6,7};int i;printf("data address:0x%-8x\r\n",data);for(i0; i&l…

c++二维数组指针

&#xff11;.定义指针指向二维数组 为了方便根据用户输入动态定义二维数组的行和列&#xff0c;引入变量rowsNum(行)&#xff0c;colsNum(列&#xff09;。 以定义&#xff15;行&#xff14;列的二维数组为例&#xff0c; int rowsNum 4;int colsNum 5;float** a new fl…

二维数组名是指针的指针吗?

我们知道一维数组名是常量指针&#xff0c;我们可以将一维数组名赋给一个指针类型再对一维数组进行相关的操作&#xff0c;那二维数组名又是什么&#xff1f; 我们这样初始化一个二维数组int A[3][3]{1,2,3,4,5,6,7,8}或者为int A[3][3]{ {1,2,3},{4,5,6}&#xff0c;{7,8,9}}…

c++二维数组中指针详解

二维数组 a[2][3]{{1,2,3},{4,5,6}};指针p有如下几种表达形式&#xff1a; 1 方式一&#xff1a;int (*p)[3]a (或&a[0]&#xff09;; 一定要加上括号&#xff0c;因为[]的优先级高于*&#xff1b;意思是定义一个指向3个int类型变量的指针。p代表二维数组中第一个…

C语言 二维数组和指针

二维数组可以看成是元素为一维数组的数组&#xff0c;假设有一个三行四列的二维数组a&#xff0c;它定义为&#xff1a; int a[3][4] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; a 是二维数组名。a 数组包含 3 行&#xff0c;即 3 个行元素&#xff1a;a[0]&#xff0c;a[1]…

C/C++指向二维数组的指针

1. 二维数组 设有整型二维数组a[3][4]如下&#xff1a;     0 1 2 3     4 5 6 7     8 9 10 11   它的定义为&#xff1a;       int a[3][4]{{0,1,2,3},{4,5,6,7},{8,9,10,11}}  设数组a的首地址为1000&#xff0c;各下标变量的首地址及其值如图所…

二维数组与二级指针

关于二维数组与二级指针那些你必须知道的事 首先,来看一个例子一个error嗯,我是解析指针数组与数组指针 首先,来看一个例子 #include <iostream>using namespace std;int main(void) {int **p;pnew int*[5];for(int i0;i<5;i){p[i]new int[5];}return 0; }不严格地说…

C语言二维数组指针用法

目录 题目 背景概念梳理 一维线性 数组指针 指针步长 数组名与指向其的指针变量名等价 数组的初始化与取元素 数组指针转换关系 解题过程 选项A&#xff1a;* (( * prt1)[2]) 选项B&#xff1a;* ( * (p5)) 选项C&#xff1a;( * prt1)2 选项D&#xff1a; * ( * (…

二维数组指针表示,C语言指针引用二维数组详解

指针变量可以指向一维数组中的元素&#xff0c;当然也就可以指向二维数组中的元素。但是在概念和使用方法上&#xff0c;二维数组的指针比一维数组的指针要复杂一些。要理解指针和二维数组的关系首先要记住一句话&#xff1a;二维数组就是一维数组&#xff0c;这句话该怎么理解…

C语言二维数组指针(指向二维数组的指针)详解

声明&#xff01;本文转载仅为方便学习使用&#xff01; 如有需要&#xff0c;请访问C语言指针数组&#xff08;数组每个元素都是指针&#xff09;详解C语言二维数组指针&#xff08;指向二维数组的指针&#xff09;详解 二维数组在概念上是二维的&#xff0c;有行和列&#x…

c语言 二维数组指针

文章目录 前言一、二维数组指针的定义&#xff1a;二、二维数组指针遍历数组元素&#xff1a;总结 前言 前面我们讲了一维数组指针&#xff0c;今天我们讲一下二维数组指针。 一、二维数组指针的定义&#xff1a; 概述&#xff1a; 二维数组指针的定义就是把一维数组换成二维…

关于二维数组,二维数组指针

最近学习指针&#xff0c;一不小心就掉进了二维数组指针的坑里面&#xff0c;在迷惑了接近一个星期后&#xff0c;我有了以下的总结。&#xff08;希望有大佬看见了能指点指点&#xff0c;我也不知道这么理解到底对不对&#xff0c;虽然我觉得是对的&#xff09; 这是我一开始…

二维数组与指针的关系详解

静态二维数组与指针 我们定义一个二维数组int a[4][3]。 二维数组实际是由多个一维数组组成&#xff0c;在这里&#xff0c;a[3][4]就是由3个长度为4的一维数组组成的二维数组。并且它们在空间上是连续的&#xff0c;相当于一个长为12的一维数组。 这里a&#xff0c;a[i]全部…

二维数组与指针(详解)

如果对字符串和二维数组有基本概念可以直接跳去看他们的关系及使用 于4.3 00:08修改&#xff0c;改正了之前文章中错误的观点&#xff0c;修改了一些低级错误 欢迎大家在文章下留言 于21-05-19 22:37再次更新,前几天有个同学问了我这么个问题&#xff0c;我觉得是一个非常好的…

C/C++二维数组指针(指向二维数组的指针)详解

多维数组与指针 用指针变量可以指向一维数组中的元素&#xff0c;也可以指向多维数组中的元素。1) 多维数组元素的地址 设有一个二维数组 a&#xff0c;它有 3 行 4 列。它的定义为&#xff1a; int a[3][4]{{1,3,5,7},{9,11,13,15},{17,18,21,23}}; a 是一个数组名。a 数…

C语言 指针+二维数组详解 (应付期末、考研的最强笔记,建议收藏)

哈喽&#xff01;这里是一只派大鑫&#xff0c;不是派大星。本着基础不牢&#xff0c;地动山摇的学习态度&#xff0c;从基础的C语言语法讲到算法再到更高级的语法及框架的学习。更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段找到好的方法、路线&#…

多任务Multitask Learning

一次只学习一个任务&#xff0c;大部分机器学习都属于单任务学习。 多任务学习&#xff1a;把多个相关的任务放在一起学习&#xff0c;同时学习多个任务。 对于复杂的问题&#xff0c;可以分解为简单的相互独立的子问题来解决&#xff0c;然后再合并结果&#xff0c;得到最初复…