C++ 数组、二维数组、函数参数

一维数组:

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     /**为了方便 数组的类型全部都是int类型的*/
 6     int numbers[5] = {1,2,3,4,5};
 7     /**通过指针的方式访问数组*/
 8     int * p = numbers;
 9     cout << "普通指针的方式访问:\n";
10     for (int i = 0; i < 5; i++)
11         cout << p[i] << " ";
12     cout << endl;
13     /**
14     在这里面numbers 被解释为数组的第一个元素的地址 即 &numbers[0] 而且还是一个常量
15     也有特殊的情况,例如:sizeof numbers是数组大小
16     */
17     cout << "数组大小:";
18     cout << sizeof numbers << " Byte.\n";// 5 * 4
19     /**通过数组指针的方式访问数组
20     数组的地址是 &numbers NOTE:这和numbers值是一样的!!!
21     也就是说相同的地址 你可以用普通的指针指向 也可以用数组指针指向
22     区别就在于他们的指针运算
23     */
24     int (*p2)[5] = &numbers;//把数组的numbers替换成(*p2)就是 数组的指针了
25     cout << "指针数组的方式访问:\n";
26     for (int i = 0; i < 5; i++)
27         cout << (*p2)[i] << " ";
28     cout << endl;
29     /**
30     int * p 和 int (*p2)[5] 的区别
31     区别在于他们的指针运算
32     这里不明白的去百度 指针运算
33     */
34     cout << "p = " << p << endl;
35     cout << "p + 1 = " << p + 1 << endl;//4Byte
36     cout << "p2 = " << p2 << endl;
37     cout << "p2 + 1 = " << p2 + 1 << endl;//20 Byte
38     /**提到 数组指针 就必去提到另一个知识点 指针数组
39     数组指针 是 指针
40     指针数组 是 数组
41     定义的时候 二者通常会混淆
42     */
43     int * p3[5];//指针数组 每一个元素 都是指针
44     for (int i = 0; i < 5; i++)
45         p3[i] = (*p2) + i;//p2是数组指针 常作为二维数组的指针使用
46     cout << "我也不知道这是什么操作:\n";
47     for (int i = 0; i < 5; i++)
48         cout << *p3[i] << " ";
49     cout << endl;
50     return 0;
51 }

二维数组:

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int data[3][5] =
 6     {
 7         {1,2,3,4,5},
 8         {9,8,7,6,5},
 9         {1,9,9,5,1}
10     };
11     /**二维数组的本质是 数组的数组、
12     第一维数组是3个一维数组的地址、第二维就是普通的数组*/
13     int * p[3] = {data[0], data[1], data[2]};
14     cout << "地址:\n";
15     for (int i = 0; i < 3; i++)
16         cout << p[i] << "   ";
17     cout << endl;
18     /**常规方式访问二维数组*/
19     cout << "常规方式访问二维数组\n";
20     for (int i = 0; i < 3; i++)
21     {
22         for (int j = 0; j <5; j++)
23             cout << data[i][j] << " ";
24         cout << endl;
25     }cout << endl;
26     /**用指针数组尝试访问一下*/
27     cout << "用指针数组皮一下\n";
28     for (int i = 0; i < 3; i++)
29     {
30         for (int j = 0; j < 5; j++)
31             cout << p[i][j] << " ";//这里之所以能访问是因为size是int
32         cout << endl;
33     }cout << endl;
34     /**用数组指针
35     int data[3][5] 的第一个元素就是data[0]那么他的 地址就是&data[0] 等价于data
36     前面说过data是属于的第一个元素的地址, 而且还是一个常量
37     那么问题来了 指向&data[0]的指针是什么样子的?
38     data[0] 的类型是int[5] 那么
39     &data[0] 的类型就是 int (*)[5]
40     */
41     int (*p2)[5] = data;
42     cout << "用数组指针访问\n";
43     for (int i = 0 ; i < 3; i++)
44     {
45         for (int j = 0; j < 5; j++)
46             cout << p2[i][j] << " ";//这里参考一维数组的数组指针就能理解了
47         cout << endl;
48     }cout << endl;
49     return 0;
50 }

数组与函数:

 1 #include <iostream>
 2 using namespace std;
 3 void print1(const int * p, int len);
 4 void print2(const int p[], int len);
 5 void print3(int p[][5], int len);//don‘t use const  DON‘T!!!
 6 void print4(int (*p)[5], int len);//don‘t use const  DON‘T!!!
 7 int main()
 8 {
 9     int numbers[5] = {1,2,3,4,5};
10     int data[3][5] =
11     {
12         {1,2,3,4,5},
13         {5,6,7,8,9},
14         {9,8,7,6,5}
15     };
16     print1(numbers, 5);
17     print2(numbers, 5);
18     print3(data, 3);
19     print4(data, 3);
20     return 0;
21 }
22 void print1(const int* p, int len)
23 {
24     cout << "print1\n";
25     for (int i = 0; i < len; i++)
26         cout << p[i] << " ";
27     cout << endl;
28 }
29 void print2(const int p[], int len)
30 {
31     cout << "print2\n";
32     for (int i = 0; i < len; i++)
33         cout << *(p + i) << ‘ ‘;
34     cout << endl;
35 }
36 void print3(int p[][5], int len)
37 {
38     cout << "print3\n";
39     for (int i = 0; i < len; i++)
40     {
41         for (int j = 0; j < 5; j++)
42             cout << p[i][j] << ‘ ‘;
43         cout << endl;
44     }cout << endl;
45 }
46 void print4(int(* p)[5], int len)
47 {
48     cout << "print4\n";
49     for (int i = 0; i < len; i++)
50     {
51         for (int j = 0; j < 5; j++)
52             cout << p[i][j] << ‘ ‘;
53         cout << endl;
54     }cout << endl;
55 }
56 /**
57 []([0]) 和 * 是相同的
58 * 就是[0]
59 p[5] 可以写成 * (p + 5)
60 p[5]实际做的事情就是先寻址然后在取值的过程
61 谭浩强老师在他的书里面讲过
62 */

补充:

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     /**
 6     const int * p 和 int * const p的区别
 7     */
 8     int a = 10;
 9     const int b = 20;
10     const int * p1;// *p1 is read-only
11     p1 = &a;
12     cout << "p1 = " << p1 << endl;
13     cout << "&a = " << &a << endl;
14     cout << "*p1 = " << *p1 << endl;
15     //ERROR   *p1 = 23;
16     p1 = &b;// p1 is not read-only
17     cout << "p1 = &b\n";
18     cout << "*p1 = " << *p1 << endl << endl;
19
20     int * const p2 = &a;// p2 is read-only and must init it
21     //int * const p2 = &b;不匹配 因为没有保护数据
22     //const int * const p2 = &b; 这样可以
23     cout << "p2 = " << p2 << endl;
24     cout << "*p2 = " << *p2 << endl;
25     int c = 1222;
26 //    p2 = &c; erro p2 is read-only
27     *p2 = 1234567;
28     cout << "*p2 = " << *p2 << endl;
29     cout << "p2 = " << p2 << endl;
30     return 0;
31 }

原文地址:https://www.cnblogs.com/zuosy/p/8580656.html

时间: 2024-07-28 23:55:44

C++ 数组、二维数组、函数参数的相关文章

C++ 一维数组 二维数组 指针

1.int a[3] = {1, 2, 3}a代表数组的首地址&a[0]也是数组的首地址 2.// int a[2][2] = {0, 1, 2, 3}; // **a 就是 a[0][0] 第一行第一列.// *(*a + 1) 就是 a[0][1] 第一行第二列.// **(a + 1) 就是 a[1][0] 第二行第一列.// *(*(a + 1) + 1) 就是 a[1][1] 第二行第二列. 3.int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9

C语言学习笔记:18_数组-二维数组

/* * 18_数组-二维数组.c * * Created on: 2015年7月6日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> /** * 二维数组: * 为什么要用二维数组呢; * 例如: 网络班有2个班,每班有5人. * 要想存储一班的学生的年龄 定义一个一维数组搞定 int ages[5]={18,19,20,18,19}; * 然后将两个班中的所有年龄分开存入一个数组中 int classes[2]

数据结构 二维数组--&gt;稀疏数组--&gt;二维数组

稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不同的值 2>把具有不同值的元素行列及值记录在一个小规模数组中,从而缩小程序规模 row col val [0]   总行       总列 有效数量 [1]  第一个数据行  第一个数据列 第一个数据值 [2]  第二个数据行 第二个数据列 第二个数据值 二维数组==>稀疏数组思路: 1>遍

java 获取数组(二维数组)长度实例程序

我们可能知道 js有个length函数,java也有啊length函数 例 如果数组是data[],则data.length 代码如下 复制代码 byte[] phone =new byte[81]; //建立一个byte类型的数组,长度为81 phone[i]!=0中phone[i]! //数组的第i的位置不等0 如: 代码如下 复制代码 byte[] phone =new byte[81]; //建立一个byte类型的数组,长度为81 phone[1]!=0中phone[1]! //数组第二

php打乱数组二维数组、多维数组

//这个是针对二维数组的!下面针对多维数组的乱序方法<?php function shuffle_assoc($list) { if (!is_array($list)) return $list; $keys = array_keys($list); shuffle($keys); $random = array(); foreach ($keys as $key) $random[$key] = $list[$key]; return $random; } ?> //以下函数也是出自php

C# 数组 二维数组

数组:相同数据类型的元素按一定顺序排列的集合.是一组变量 作用:操作大量数据    数组的定义1.数组里面的内容必须是同一类型2.数据必须有长度限制                               //  定义时限定长度,往后无法更改 一维数组 表达式 1.数据类型[ ] 变量名 = new 数据类型[长度]:              string [ ] s  = new atring [ 5 ];    //定义一个有五个变量的string类型数组 s [0] = "aaa&q

each处理一维数组二维数组和JS改变屏幕事件

改变屏幕大小事件 window.onresize=function(){ var w=$(window).width(); if((w<1189)){ $('.one').hide(); } } each处理一维数组 $.each(arr,function(i,val)){ alert(i);alert(val) } each处理二维数组 $.each(arr2,function(i,item){ alert(i)输出二维数组有几个数组元素 alert(item) 将输出每一个数组 }) var

第6章 数组 二维数组互调行列

1.编写java程序,将二维数组中的行列互调显示出来.如: 1 2 3        显示出的结果为:      1 4 7 4 5 6                                    2 5 8 7 8 9                                    3 6 9 package six; public class Sixoneegiht { public static void main(String[] args){ int arr[][]=n

【转】C++动态创建二维数组,二维数组指针

原作者博客:蒋国宝的IT技术博客 今天完成一道题目需要自己用指针创建一个二维的数组,不得不承认指针的确是恶心. int **result; int row = 4; int col = 5; result = new int*[row]; for (int i=0; i<row; i++) { result[i] = new int[col]; } for (int i=0; i<row; i++) { for (int j=0; j<col; j++) { result[i][j] =

7.17 数组(二维数组) Day10

---note--- 二维数组: 数组名 [下标] [下标] a[2][3] b[1][2]=a[3][4]/2 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}: 字符数组: char c[10]; c[0]="I" 空不等于没有数据 strcpy(字符串1,字符串2) 左对齐直接覆盖 strcpy(str1,str2,2) 只把str2的前两个字符覆盖至str1 strcat 一般形式:strcat(字符数1,字符数2) 把字符串拼接至字