C语言基础--二维数组
二维数组概念:
数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组。
二维数组格式:
元素类型 数组名称[一维数组的个数][每个一维数组的元素个数];
元素类型 数组名称[行数][列数];
元素类型: 说明二维数组中每个一维数组存储什么类型的数据
一维数组的个数: 说明二维数组有多少个元素
每个一维数组的元素个数 : 说明二维数组中每一个一维数组的元素个数
二维数组的定义:
//可以看作由一维数组names[0]和一维数组names[1]组成,这两个一维数组都包含了3个char类型的元素
char names[][] =
{
// 0 1 2
{'l', 'n', 'j'}, //
{'l', 'm', 'j'} //
};
二维数组的初始化:
// 1.定义的同时初始化
int names[][] =
{
{'l', 'n', 'j'},
{'l', 'm', 'j'}
}; // 2.先定义再初始化
int names2[][];
names2[][] = 'l';
names2[][] = 'n';
names2[][] = 'j'; names2[][] = 'l';
names2[][] = 'm';
names2[][] = 'j'; // 3.完全初始化
int names3[][] =
{
{'l', 'n', 'j'},
{'l', 'm', 'j'}
}; // 4.不完全初始化
int names4[][] =
{
{'l', 'n'},
}; // 5.省略元素个数的两种写法
// 明确的告诉二维数组, 我们有2个一维数组
char names5[][] =
{
'l', 'n', 'j',
'l', 'm', 'j'
};
char names15[][] =
{
'l', 'n', 'j',
'n', 'b'
}; // 没有告诉二维数组我们有几个一维数组
// 如果在"定义的同时"进行初始化, 那么一位数组的个数可以省略
//系统会自动根据每一个一维数组能够存放多少个元素, 自动根据初始化的值推断出二维数组中一共有多少个元素(多少个一维数组)
char names6[][] =
{
'l', 'n', 'j',
'l', 'm', 'j',
'n', 'b'
}; // 6.错误写法
// 注意点: 每个一维数组的元素个数不能省略
int names7[][] =
{
{'l', 'n', 'j'},
{'l', 'm', 'j'}
}; // 搞不清楚应该分配多大的存储空间, 以及搞不清楚应该把哪些数据赋值给第一个数组, 哪些数据赋值给第二个数组
int names7[][] =
{
'l', 'n', 'j',
'l', 'm', 'j'
};
访问元素:
// 获取二维数组中的一维数组的元素的值
printf("%c\n", names[][]);
遍历:
// 如何遍历二维数组
// 思路: 1.取出二维数组的每一个元素(取出二维数组中的一维数组)
// 2.遍历一维数组
for (int i = ; i < ; i++) { // 0 , 1
// 1.取出一维数组
//names[i];
for (int j = ; j < ; j++) { // 0 , 1 , 2
printf("name[%i][%i] = %c\n", i, j, names[i][j]);
}
}
存储方式:
1)计算机会给二维数组分配一块连续的存储空间
2)数组名代表数组的首地址,从首地址位置,依次存入第1行、第2行、.....
3)每一行存储方式,从行首地址还是,依次存储行的第1个元素、第2个元素、第3个元素......
4)每个元素占用相同的字节数(取决于数组类型)
5)并且数组中元素之间的地址是连续。

二维数组与函数:
#include <stdio.h>
void change2(char names[][]);
void change3(char values[]);
void change4(char value); int main(int argc, const char * argv[]) {
char names[][] =
{
{'l', 'n', 'j'},
{'l', 'm', 'j'}
};
// &names == names == &names[0] , names就是数组的地址
printf("&names = %p\n", &names);
printf("names = %p\n", names);
printf("&names[0] = %p\n", &names[]); // 二维数组名称作为函数参数传递, 是传递的地址
change2(names);
// names[0] == 一维数组
change3(names[]);
// names[0][0] == 一维数组的一个元素 == 值
change4(names[][]); printf("names[0][0] = %c\n", names[][]);
return ;
}
// 接收基本数据类型
void change4(char value)
{
value = 'E';
printf("我执行了\n");
}
// 以后只要看到函数的参数是一个数组, 那么就是地址传递 在函数中修改形参的值会影响到参数
//接收一维数组
void change3(char values[])
{
values[] = 'Q';
printf("我执行了\n");
}
//接收二维数组 行数和列数不能省略
void change2(char values[][])
{
values[][] = 'w';
printf("我执行了\n");
}
C语言基础--二维数组的更多相关文章
- C语言基础:二维数组 分类: iOS学习 c语言基础 2015-06-10 21:42 16人阅读 评论(0) 收藏
二维数组和一位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,一维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的 ...
- C语言基础二维数组
(1)二位数组的定义int array[n][m],行下标的取值范围是0~n-1,列下标的取值范围是0~m-1,二维数组最大下标元素是array[n-1][m-1]:如定义一个3行4列的数组 int ...
- C语言之二维数组
二维数组 还是一个数组,只不过数组中得每一个元素又是一个数组 1). 声明语法 类型 数组名[行][列]; 例: int nums[2][3];//2行3列的二维数组,保存的数据类型是int类型 c ...
- C语言 字符二维数组(多个字符串)探讨 求解
什么是二维字符数组? 二维字符数组中为什么定义字符串是一行一个? “hello world”在C语言中代表什么? 为什么只能在定义时才能写成char a[10]="jvssj" ...
- C Program基础-二维数组
一维数组可以看作一行连续的数据,只有一个下标.C语言允许构造二维数组甚至多维数组,在实际问题中有时候常常需要用到二维数组(例如数学上的矩阵),二维数组有两个下标,以确定某个元素在数组中的位置. (一) ...
- C语言中将二维数组作为函数参数来传递
c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include <stdio.h> void func(int n, char ...
- C语言回顾-二维数组
1.二维数组:是一个特殊的一维数组 完全初始化: 1)int a[2][3]={{1,2,3},{2,3,4}}; 2)连续赋值int a[2][3]={1,2,3,2,3,4}; 3)可以省略第一维 ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- 【C语言】二维数组做形参
二维数组有两种形式: ①在栈上: int a[4][4] = {...}; ②在堆堆上: int ** a = new int *[4]; for ...
随机推荐
- 记录archlinux中安装pcl的大致流程
贴一下pcl在github上的网址: https://github.com/PointCloudLibrary/pcl/ 从这个网址出发,一般能找到安装的 tutorial.以下只说一下在archli ...
- CentOS7使用无线网卡
1.安装CentOS7最小化时候,在网络连接功能项中设置WIFI的设备和密码. 2.进入系统,执行nmcli查看使用NetworkManager管理的网络 [root@seastar ~] nmcli ...
- 白话LINQ系列2---以代码演进方式学习LINQ必备条件
今天,我们通过一个简单的示例代码的演进过程,来学习LINQ必备条件:隐式类型局部变量:对象集合初始化器:委托:匿名函数:lambda表达式:扩展方法:匿名类型.废话不多说,我们直接进入主题. 一.实现 ...
- VIM技巧之去除代码行号并缩进代码
从网上找源代码时经常会发现代码虽然排版很好,但是前面带着行号,直接复制粘贴得将前面的行号去掉才能编译,而更糟糕的是前面带行号,而代码又没排版,简直是噩梦.在VIM中可以轻易地解决这个问题. 这里将网上 ...
- CentOS7下安装Mysql和Memcached 以及 使用C#操作Mysql和Memcached
我本身是学.net的,但是现在很多主流SQL和NOSQL都是部置在linux下,本着好学的精神,前段时间装了个虚拟机,在其装上CentOS64位的服务器系统,对于英文0基础,linux0基础的我来说, ...
- JQ 操作 radio、checkbox 、select
MXS&Vincene ─╄OvЁ &0000026─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很残酷,明天更残酷,后天很美好, ...
- Events in ASP.NET Master and Content Pages
Content page PreInit event. Master page controls Init event. Content controls Init event. Master pag ...
- php缓冲区 sapi缓冲区
<?php#设置php.ini中output_buffering = 32#使用apache可以看到效果 #nginx+php-fpm看不到效果 nginx缓存 sockets通信问题?#imp ...
- Unity3D Function Not Supported - Unity动画事件提示不支持的解决方法
把脚本放在所有组件的最上面 然后刷新一下就好了 如果还是显示不支持就是参数问题.比如不支持bool参数,但支持string参数. 所以最好用无参数的
- CentOS 安装Zookeeper-3.4.6 单节点
Dubbo 建议使用 Zookeeper 作为服务的注册中心. 注册中心服务器(192.168.3.71)配置,安装 Zookeeper: 1. 修改操作系统的/etc/hosts 文件中添加: # ...