-
2021-05-21 04:42:24
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"malloc.h"
//动态创建二维数组方法一:
typedef enum{
style_char,
style_short,
style_int
}Array2Style;
typedef struct{
int line;
int row;
Array2Style style;
void * p;
}DynamicArray2;
void initArray2(DynamicArray2 * array2,int line,int row,Array2Style style)
{
int unitLen = 0;
if(style == style_char)unitLen = 1;
else if(style == style_short)unitLen = 2;
else if(style == style_int)unitLen = 4;
array2->p = (void *)malloc(line * row * unitLen);//
array2->line = line;
array2->row = row;
array2->style = style;
}
//获得数组元素指针
void * getArray2DataPtr(DynamicArray2 * array2,int line,int row)
{
int unitLen = 0;
if(array2->style == style_char)unitLen = 1;
else if(array2->style == style_short)unitLen = 2;
else if(array2->style == style_int)unitLen = 4;
if(array2->style == style_char)return (void*)((char*)array2->p + line * array2->row + row);
else if(array2->style == style_short)return (void*)((short*)array2->p + line * array2->row + row);
else if(array2->style == style_int)return (void*)((int*)array2->p + line * array2->row + row);
return NULL;
}
//void *
void main(void)
{
int i,j;
char k = 'a';
DynamicArray2 arr2;
initArray2(&arr2,1,26,style_char);
for(i = 0 ;i < arr2.line;i ++)
{
for(j = 0;j < arr2.row;j ++)
{
*(char*)getArray2DataPtr(&arr2,i,j) = k++;
}
}
for(i = 0 ;i < arr2.line;i ++)
{
for(j = 0;j < arr2.row;j ++)
{
printf("%c ",*((char*)getArray2DataPtr(&arr2,i,j)));
}
}
free(arr2.p);
}
//动态创建二维数组方法二:
/*
#if 1
void main(void)
{
int i,j,k = 0;
char ** twoarray = 0;
int line = 4;
int cow = 4;
twoarray = (char **)malloc(line * sizeof(char *));
for(i = 0;i < line;i ++)
{
twoarray[i] = (char *)malloc(cow * sizeof(char));
}
for(i = 0;i < line;i ++)
{
for(j = 0;j < cow;j ++)
{
twoarray[i][j] = 'a' + k ++;
}
}
for(i = 0;i < line;i ++)
{
for(j = 0;j < cow;j ++)
{
printf("%c",twoarray[i][j]);
}
}
}
#endif */
更多相关内容 -
C语言 指针与二维数组详解
2020-12-31 14:08:24二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,...C语言中的二维数组是按行排列的,也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 个元素也是依次存放。数组 a -
C语言中二维数组作为函数参数来传递的三种方法
2020-08-25 16:20:03主要给大家介绍了关于C语言中二维数组作为函数参数来传递的三种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 -
一道 C语言 二维数组作业题目
2021-01-06 03:51:18有下面这样的一个二维表,请将其使用二维数组输出 姓名 语文 数学 英语 张三 80 70 90 李四 40 50 90 王五 90 98 100 题解 与几位童鞋交流了一下发现他们都把汉字单独拿出来了,只用数组存储的成绩,... -
C语言数组——二维数组
2020-02-07 14:58:35C语言目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 ...二维数组 前面介绍了...C语言目录
C/C++学习资源(百度云盘链接)
计算机二级资料(过级专用)
C语言学习路线(从入门到实战)
编写C语言程序的7个步骤和编程机制
C语言基础-第一个C程序
C语言基础-简单程序分析
VS2019编写简单的C程序示例
简单示例,VS2019调试C语言程序
C语言基础-基本算法
C语言基础-数据类型
C语言中的输入输出函数
C语言流程控制语句
C语言数组——一维数组二维数组
前面介绍了一维数组,接下来介绍如何定义和使用二维数组。
二维数组定义的一般形式如下:
类型说明符 数组名[常量表达式1][常量表达式2]
与一维数组的定义唯一的不同是多了一个常量表达式2,其中,常量表达式1为第一维的长度,常量表达式2为第二维的长度。通常在处理二维数组的时候,为了便于理解,都将数组视为一个矩阵,常量表达式1表示矩阵的行数,而常量表达式2表示矩阵的列数。与一维数组一样,在定义二维数组时,常量表达式同样不能为变量。下面先通过一段代码来看二维数组的定义。
#include<stdio.h> #define M 4 #define N 3 int main() { int arr[M][N]; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { printf("&arr[%d][%d]=%d\t", i, j, &arr[i][j]); } printf("\n"); } return 0; }
运行结果:
将二维数组arr视为一个矩阵,下图显示了数组中每个元素在矩阵中的存放位置。
数组中各个元素在矩阵中对应的位置由二维数组的两个下标决定。我们可以将定义的二维数组int arr[4][3]视为由arr[4]和int [3] 两部分构成,将arr[4]视为一个整型一维数组,其中含有4个元素arr[0]、arr[1]、arr[2]、arr[3],每个元素都是int[3]类型的,也就是说,每个元素又是一个一维数组,每个一维数组含有3个元素,如arr[0]含有arr[0][1]、arr[0][1]、arr[0][2]三个元素。知道了二维数组的这种特殊结构之后,接下来通过下图来了解二维数组在内存中的存储结构。
通过上述二维数组在内存中的存储结构图可以发现,二维数组中的所有元素都存储在一片连续的内存单元中,所占用的内存大小为元素类型所占用的内存大小乘以第一维及第二维的长度。如果以矩阵的方式来分析二维数组的存储方式,那么先从矩阵第一行从左往右依次存储完所有元素,然后按照同样的方法存储第二行的所有元素,直到存储完所有数组元素为止。接下来再看一个二维数组的示例:
任意输入一个3行3列的二维数组,求对角元素之和
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int arr[3][3]; int i, j, sum = 0; printf("please input:\n"); for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { scanf("%d", &arr[i][j]); } } for (i = 0; i < 3; i++) { for ( j = 0; j < 3; j++) { if (i==j) { sum += arr[i][j]; } } } printf("the result is: %d\n", sum); return 0; }
运行结果如下:
关于以为数组就介绍到这,后面继续更新。。。如果您觉得本篇文章对您有帮助,请转发给更多的人
【C语言中文社区】是一个C语言视频教程、学习笔记、电子书、计算机二级资料等专注于C语言编程学习者的干货知识分享平台,精选深度文章,分享优秀干货类、技能类的学习资源,帮助学习中的你。
-
C语言二维数组传参示例
2020-10-23 10:38:26C语言中,二维数组的参数传递。 例如: char str[5][100]; 如果作为参数传递,内有详细示例。 三种传参示例供参考。 -
C语言动态创建二维数组
2021-08-30 22:35:57在编程中有时需要使用二维数组作为buffer,下面是我写的一个二维数组的demo。 这里面涉及到几个内存操作的知识点,一个一个的来讲。 1. 创建两个1维数组,用于给二维数组填充值的时候使用。 /*2行27列,一维数组...在编程中有时需要使用二维数组作为buffer,下面是我写的一个二维数组的demo。
这里面涉及到几个内存操作的知识点,一个一个的来讲。
1. 创建两个1维数组,用于给二维数组填充值的时候使用。
/*2行27列,一维数组长度为27*/ #define BUFF_SIZE_ROW 2 #define BUFF_SIZE_COL 27 int main() { /*初始化两个原子数据,全1和全2*/ unsigned char data[BUFF_SIZE_COL]; unsigned char data1[BUFF_SIZE_COL]; /*memset整体为数组赋值某个值*/ memset(data, 1, BUFF_SIZE_COL); memset(data1, 2, BUFF_SIZE_COL);
这一段包含两个知识点,一个是一位数字的创建,和一维数组的一个整体一次性赋值。用到的重点函数的memset。
2.动态创建二维数组,用法如下
unsigned char **buffer_a = (unsigned char **)malloc(BUFF_SIZE_ROW * sizeof(unsigned char *)); for(int i = 0; i < BUFF_SIZE_ROW; i++) { buffer_a[i] = (unsigned char *)malloc(BUFF_SIZE_COL * sizeof(unsigned char)); }
3.将原子一维数组填充到动态创建的二维数组中
/*将原子数据赋值给buffer_a*/ memcpy(buffer_a[0], data1, BUFF_SIZE_COL); memcpy(buffer_a[1], data1, BUFF_SIZE_COL);
这部分用到的知识点是memcpy,这里一定要注意copy的内存大小。
4.将一个动态创建的二维数组赋值给另外一个动态创建的二维数组
/*将buffer_a循环赋值给buffer_b*/ for (size_t i = 0; i < BUFF_SIZE_ROW; i++) { memcpy(buffer_b[i], buffer_a[i], BUFF_SIZE_COL); }
这里注意buffer_b的创建方式与buffer_a一致。
5.释放二维数组
/*释放buffer,先释放行,再释放列*/ for(int i = 0; i < BUFF_SIZE_ROW; i++) free(buffer_a[i]); free(buffer_a); buffer_a = NULL;
这里注意要先free掉列,再释放行,与创建时相反
下面是完整的测试代码:
#include <stdio.h> #include <windows.h> /*2行27列,一维数组长度为27*/ #define BUFF_SIZE_ROW 2 #define BUFF_SIZE_COL 27 int main() { /*初始化两个原子数据,全1和全2*/ unsigned char data[BUFF_SIZE_COL]; unsigned char data1[BUFF_SIZE_COL]; /*memset整体为数组赋值某个值*/ memset(data, 1, BUFF_SIZE_COL); memset(data1, 2, BUFF_SIZE_COL); /*创建二维动态数组buffer_a和buffer_b*/ unsigned char **buffer_a = (unsigned char **)malloc(BUFF_SIZE_ROW * sizeof(unsigned char *)); for(int i = 0; i < BUFF_SIZE_ROW; i++) { buffer_a[i] = (unsigned char *)malloc(BUFF_SIZE_COL * sizeof(unsigned char)); } unsigned char **buffer_b = (unsigned char **)malloc(BUFF_SIZE_ROW * sizeof(unsigned char *)); for(int i = 0; i < BUFF_SIZE_ROW; i++) { buffer_b[i] = (unsigned char *)malloc(BUFF_SIZE_COL * sizeof(unsigned char)); } /*将原子数据赋值给buffer_a*/ memcpy(buffer_a[0], data1, BUFF_SIZE_COL); memcpy(buffer_a[1], data1, BUFF_SIZE_COL); /*将buffer_a循环赋值给buffer_b*/ for (size_t i = 0; i < BUFF_SIZE_ROW; i++) { memcpy(buffer_b[i], buffer_a[i], BUFF_SIZE_COL); } /*输出A B的第一行数据,验证是否等于data*/ for (size_t i = 0; i < BUFF_SIZE_COL; i++) { printf("a %d, %d\r\n", i, buffer_a[0][i]); } for (size_t i = 0; i < BUFF_SIZE_COL; i++) { printf("b %d, %d\r\n", i, buffer_b[0][i]); } /*释放buffer,先释放列,再释放行*/ for(int i = 0; i < BUFF_SIZE_ROW; i++) free(buffer_a[i]); free(buffer_a); buffer_a = NULL; for(int i = 0; i < BUFF_SIZE_ROW; i++) free(buffer_b[i]); free(buffer_b); buffer_b = NULL; system("pause"); return 0; }
linux kernel
int i, j; uint8_t **buffer_a = (uint8_t **)kmalloc(BUFF_SIZE * sizeof(uint8_t *), GFP_KERNEL); uint8_t **buffer_b = (uint8_t **)kmalloc(BUFF_SIZE * sizeof(uint8_t *), GFP_KERNEL); uint8_t data[SAMP_SIZE]; memset(data, 0xff, SAMP_SIZE); for (i = 0; i < BUFF_SIZE; i++) { buffer_a[i] = (uint8_t *)kmalloc(SAMP_SIZE * sizeof(uint8_t), GFP_KERNEL); } for (i = 0; i < BUFF_SIZE; i++) { buffer_b[i] = (uint8_t *)kmalloc(SAMP_SIZE * sizeof(uint8_t), GFP_KERNEL); } calltime = ktime_get(); for (i = 0; i < BUFF_SIZE; i++) { memcpy(buffer_a[i], data, SAMP_SIZE); } for (j = 0; j < 100; j++) { /* code */ for (i = 0; i < BUFF_SIZE; i++) { memcpy(buffer_b[i], buffer_a[i], SAMP_SIZE); } } rettime = ktime_get(); delta = ktime_sub(rettime, calltime); duration = (unsigned long long )ktime_to_ns(delta) >> 10; printk("buffer copy use %lld us\r\n", duration); /*free buffer*/ for (i = 0; i < BUFF_SIZE; i++) { kfree(buffer_a[i]); } kfree(buffer_a); buffer_a = NULL; for(i = 0; i < BUFF_SIZE; i++) { kfree(buffer_b[i]); } kfree(buffer_b); buffer_b = NULL;
-
C语言 动态创建二维数组
2021-05-21 04:42:17/*C语言 如何动态创建二维数组转化为一维数组申请数组,创建和释放都比较简单*/#include #include #include #define RANK 10#define COLUMN 7int main(){int i,j;int (*p)[COLUMN];//动态生成二维数组,指定列数为.../*C语言 如何动态创建二维数组
转化为一维数组申请数组,创建和释放都比较简单
*/
#include
#include
#include
#define RANK 10
#define COLUMN 7
int main()
{
int i,j;
int (*p)[COLUMN];
//动态生成二维数组,指定列数为COLUMN,如果想改,自己该里面
//的参数,如果想定义n行2列就为: p=(int (*)[2])malloc(n*2*sizeof(int));
p=(int (*)[COLUMN])malloc(RANK*COLUMN*sizeof(int)); //动态申请n行COLUMN列的二维数组
for(i=;i
for(j=;j
p[i][j]=i*j;
for(i=;i
{
for(j=;j
printf("%d,",p[i][j]);
printf("\n");
}
free(p);
system("pause");
return ;
}
当然,还有第二种方法,这里就不测试了,只是为了工程实用性,哈哈
C语言动态生成二维数组
# 动态创建二维数组示例 #include "stdlib.h" #include "stdio.h" #include in ...
【转】C++动态创建二维数组,二维数组指针
原作者博客:蒋国宝的IT技术博客 今天完成一道题目需要自己用指针创建一个二维的数组,不得不承认指针的确是恶心. int **result; ; ; result = new int*[row]; ; ...
动态创建二维vector数组 C和C++ 及指针与引用的区别
二维vectorvector > ivec(m ,vector(n)); //m*n的二维vector 动态创建m*n的二 ...
如何在C++中动态建立二维数组(转)
http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...
c++中创建二维数组的几种方法
一.用new申请内存空间 int **dp=new int*[n];//动态申请二维数组nxm ;i
C++中动态申请二维数组并释放方法
C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/ ...
转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include #include using namespace std;int mai ...
Python创建二维数组(关于list的一个小坑)
0.目录 1.遇到的问题 2.创建二维数组的办法 3.1 直接创建法 3.2 列表生成式法 3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作 ...
c/c++ 图的创建(二维数组法)
c/c++ 图的创建(二维数组法) 图的概念 图由点和线组成 知道了图中有多少个点,和哪些点之间有线,就可以把一张图描绘出来 点之间的线,分有方向和无方向 创建图 创建图,实际就是创建出节点,和节点之 ...
随机推荐
SQLite XXTea加密学习
这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...
用Unity写一个12306验证器的恶搞图生成软件
前言 前一阵子是买火车票的高峰期,然后12306的验证码就遭到各种吐槽.其实大部分验证码没有那么难,大家只是因为买不到票 发泄一下不满的情绪.于是各种恶搞的图就出现了,比如找二次元里人物的矮子,找好男 ...
session如何保存在专门的StateServer服务器中
session保存在专门的StateServer中,该种方式,性能损失比sql略好.比inproc据说有10%-15%的性能损失.怎么使用StateServer 服务器呢? 1.初始化StateSer ...
Navicat(服务器对象) -2之MySQL 或 MariaDB 对象
MySQL 或 MariaDB 对象 http://www.navicat.com.cn/manual/online_manual/cn/navicat/win_manual/index.html 要 ...
WPF命令参数CommandParameter
XAML代码如下:
pdf文件之itextpdf插入html内容以及中文解决方案
简述 目前网上已经有很多种html文件直接转pdf的技术帖子,但是很少有直接将部分html作为段落插入到pdf中,而且也没有一个可以很好的解决中文显示的问题. 因此今天上午围绕这个问题进行了研究,把解 ...
C#的发展历程 -- 系列介绍
C#的发展历程第五 - C# 7开始进入快速迭代道路 C#与C++的发展历程第四 - C#6的新时代 C#与C++的发展历程第三 - C#5.0异步编程巅峰 C#与C++的发展历程第二 - C#4.0 ...
sql实时提交事务
public void deleteByHbtlidAndDept(String class_id,String depart_id) { Session session = this.getHibe ...
-
C语言中的二维数组
2021-05-23 01:21:301.二维数组的定义和引用一. 数据类型 数组名[常量表达式1][常量表达式2];(1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1(2)列下标的取值范围0~m-1(3)二维数组的最大下标元素是array[n-1][m-1];假如有一个... -
C语言指针(二维数组)
2021-05-07 20:58:571.二维数组 1.1、二维数组的内存映像 (1)一维数组在内存中是连续分布的多个内存单元组成的,而二维数组在内存中也是连续分布的多个内存单元组成的。 (1)从内存角度来看,一维数组和二维数组没有本质差别。 (2)二维... -
c语言 函数传入二维数组的方法
2022-03-12 12:53:32不使用指针传入二维数组: int fun(int n,int m,int a[n][m]){ .......代码 } int main(){ int n,m; scanf("%d %d",&n,&m); int a[n][m]; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ scanf... -
C语言中二维数组指针的简要说明
2021-01-01 05:58:58C语言中,指针是一个复杂但又灵活多变的知识点,我们知道,在一维数组中,对于一个数组a[],*a,a,&a,都表示a的首地址,但如果与二维数组混合使用,就显得更为复杂了。例如对于一个二维数组 a[2][4]={{1,2.3},{4... -
c语言寻找二维数组中的鞍点
2015-11-06 19:34:37用c语言写的输入一个二维数组,找其中的鞍点 -
C语言二维数组中的查找的实例
2020-08-29 23:19:05主要介绍了C语言二维数组中的查找的实例的相关资料,需要的朋友可以参考下 -
c语言二维字符数组的输入输出
2021-10-28 23:08:00int n=3; int a[n][n]; for(int i=0;i;i++) for(int j=0;j;j++) scanf("%c",&a[i][j]); for(int i=0;i;i++) for(int j=0;... 这些代码不能正确的对二维数组进行输出跟输出 输入 asd asd asd 输出 asd asd -
C语言动态分配二维数组
2013-04-06 17:04:20C语言动态分配二维数组,对数组动态分配进行详细描述 -
【C语言】将二维数组转存一维数组
2021-10-07 13:59:49请编写函数fun,该函数的功能:将m行n列的二维数组中的数据,按列的顺序依次放到一维数组中。 详细代码: #include<stdio.h> void fun(int a[][4], int* b); int main() { int c[20] = { 0 }, f[3][4] = { 1,4... -
C语言函数调用二维数组,指针问题
2021-05-25 04:35:44话题:C语言函数调用二维数组,指针问题回答:正如楼下所言 int **p ,定义的p是一个指向int*型的指针int (*p)[1]是一个指向数组的指针 数度为1假如定义成 deal(int **p),传参数时要加类型转换: deal((int**)a);... -
C语言有关二维数组的讲解
2022-02-04 11:36:31C语言 二维数组 二维数组声明 二维数组元素获取 二维数组传参 -
推箱子(C语言)(二维数组)
2022-03-17 08:31:172.基于二维数组的实现 3.元素:R表示人,X表示箱子,*表示墙 4.实现人推箱子走,碰到墙不走 5.代码共230行,有注释及代码介绍,易理解学习 6.对二维数组的拓展学习很有帮助 7.我还有其他资源,欢迎询问获取 8.若代码... -
C语言如何传入二维数组
2021-03-24 20:01:21C语言如何传入二维数组咋一看,顺手就写出下面的代码2 修改3 把二维数组当成一维数组用4 其他方式5 需要传入二维数组吗? 咋一看,顺手就写出下面的代码 下面就一个矩阵的加法演示可能出现的问题 void addMatrix(int... -
C语言中二维字符数组.pdf
2021-10-08 14:56:48C语言中二维字符数组.pdf -
c语言题之二维数组的查找
2021-05-25 11:26:37在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 [ [1,3,... -
用C语言求二维数组鞍点
2012-10-23 22:45:00用二C语言求二维数组鞍点,有文档和程序。。 -
C语言之二维数组-定义一个二维数组并打印
2022-03-28 13:20:35C语言之二维数组-定义一个二维数组并打印 代码示例: [liangjian@10 ~]$ cat test10.c #include <stdio.h> int main(void) { int a[4][5]= { {1,2,3,4,5}, {5,6,7,8,9}, {4,3,2,1,0}, {9,8,71,6,... -
c语言怎么定义一维数组和二维数组
2021-05-18 16:51:33c语言怎么定义一维数组和二维数组c/c++编程我们常常需要用到一维数组和二维数组,下面就通过两个例子介绍一下如何声明以为二维数组,并且进行赋值应用。1、一维数组一维数组的声明包括如下结构:类型 变量名[N],... -
C语言中二维数组如何申请动态分配内存
2021-05-22 12:39:12匿名用户1级2012-05-07 回答//---------------------------------------------------------------------------#include #include #include ... //数组元素的数据类型em_type **new_mat(int rows,int cols) //新建一...