c: two-dimensional array

/*** ****************************************************************************** @file        twoDimensional.h* @brief       二维数组  Pointers and 2-D arrays* @author       geovindu,Geovin Du,涂聚文 (geovindu@163.com)* ide: vscode c11,c17  windows 10* @date        2023-10-30* @copyright   geovindu 站在巨人的肩膀上 Standing on the Shoulders of Giants* matrix            =>    Points to base address of two-dimensional array.Since array decays to pointer.*(matrix)            =>    Points to first row of two-dimensional array.
*(matrix + 0)        =>    Points to first row of two-dimensional array.
*(matrix + 1)        =>    Points to second row of two-dimensional array.**matrix             =>    Points to matrix[0][0]
*(*(matrix + 0))     =>    Points to matrix[0][0]
*(*(matrix + 0) + 0) =>    Points to matrix[0][0]
*(*matrix + 1)       =>    Points to matrix[0][1]
*(*(matrix + 0) + 1) =>    Points to matrix[0][1]
*(*(matrix + 2) + 2) =>    Points to matrix[2][2]* ******************************************************************************/#ifndef TWODIMENSIONAL_H_
#define TWODIMENSIONAL_H_#include <stddef.h>
#include <stdbool.h>#define BUF_LEN 100                    // Length of input buffer
#define COUNT   5                 // Initial number of strings/*** @brief      输入字符排序**/
void stringInputSort();/*** @brief** @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/int pointDisplay(const int** arry,int row,int col);/*** @brief      * @param arry  二维数组* @param row 行长度* @param col 列长度* @return int*/int pointDisplay1(const** arry,int row,int col);/*** @brief  * @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/int pointDisplay0(int arry[10][10],int row,int col);/*** @brief  OK** @param arry 二维数组* @param intlength 行列共长度* @return int*/
int pointDisplay2(int arry[10][10],int intlength);/*** @brief** @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/
int pointDisplay3(int** arry,int row,int col);/*** @brief       Ok* @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/
int pointDisplay4(int** arry,int row,int col);/*** @brief    OK  * @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/
int pointDisplay5(int*** arry,int row,int col);/*** @brief   ok   * @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/
int pointDisplay6(int** arry,int row,int col);/*** @brief 释放所有堆内存     * @param ps* @param n**/
void freeMemoryChar(char **ps,size_t n);/*** @brief 释放所有堆内存     * @param ps* @param n**/
void freeMemoryInt(int **ps,size_t n);#endif
/*** ****************************************************************************** @file        twoDimensional.c* @brief       二维数组  Pointers and 2-D arrays* @author      geovindu,Geovin Du,涂聚文 (geovindu@163.com)*  ide: vscode c11,c17  windows 10* @date        2023-10-30* @copyright   geovindu 站在巨人的肩膀上 Standing on the Shoulders of Giants* ******************************************************************************/#include <stddef.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include "include/twoDimensional.h"/*** @brief      输入字符排序**/
void stringInputSort()
{char buf[BUF_LEN];                  // Input buffersize_t str_count = 0;               // Current string countsize_t capacity = COUNT;            // Current maximum number of stringschar **pS = calloc(capacity, sizeof(char*));    // Pointers to stringschar** psTemp = NULL;               // Temporary pointer to pointer to charchar* pTemp = NULL;                 // Temporary pointer to charsize_t str_len = 0;                 // Length of a stringbool sorted = false;                // Indicated when strings are sortedprintf("Enter strings to be sorted, one per line. Press Enter to end:\n");// Read in all the stringschar *ptr = NULL;while(true){ptr = fgets(buf, BUF_LEN, stdin);if(!ptr)                          // Check for read error{printf("Error reading string.\n");free(pS);pS = NULL;return 1;}if(*ptr == '\n') break;           // Empty line checkif(str_count == capacity){capacity += capacity/4;          // Increase capacity by 25%if(!(psTemp = realloc(pS, capacity))) return 1;pS = psTemp;}str_len = strnlen(buf, BUF_LEN) + 1;  //strnlen_sif(!(pS[str_count] = malloc(str_len))) return 2;strcpy_s(pS[str_count++], str_len, buf);}// Sort the strings in ascending orderwhile(!sorted){sorted = true;for(size_t i = 0 ; i < str_count - 1 ; ++i){if(strcmp(pS[i], pS[i + 1]) > 0){sorted = false;               // We were out of order so...pTemp= pS[i];                 // swap pointers pS[i]...pS[i] = pS[i + 1];            //       and...pS[i + 1]  = pTemp;           //     pS[i + 1]}}}// Output the sorted stringsprintf("Your input sorted in ascending sequence is:\n\n");for(size_t i = 0 ; i < str_count ; ++i){printf("%s", pS[i] );free(pS[i]);                      // Release memory for the wordpS[i] = NULL;                     // Reset the pointer}free(pS);                           // Release the memory for pointerspS = NULL;                          // Reset the pointer}/*** @brief  可以** @param arry  二维数组* @param row 行长度* @param col 列长度* @return int*/int pointDisplay(const** arry,int row,int col){//在main 中直接使用可以printf("\n6指针遍历二维数组\n");int *dup;//dup= arry[0];  //*(*(arry + 0));//*(arry + 0);//for (int i = 0; i < row; i++) //sizeof(arry) / sizeof(int){dup= arry[i];for(int j=0;j<col;j++){printf("%d ",*dup++);}printf("\n");}printf("\n");}/*** @brief      * @param arry  二维数组* @param row 行长度* @param col 列长度* @return int*/int pointDisplay1(const** arry,int row,int col){//在main 中直接使用可以printf("\n7指针遍历二维数组\n");int* dup;for (int i = 0; i < row; i++) //sizeof(arry) / sizeof(int){dup=arry[i];//*arry;// for(int j=0;j<col;j++){// printf ("%d \t", *(dup+i));   //printf("\n");    //显示了第一行printf ("%d \t", *(dup+j)); }//printf("%d ",*dup++);printf("\n");}printf("\n");}/*** @brief  * @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/int pointDisplay0(int arry[10][10],int row,int col){printf("\n14指针遍历二维数组\n");int *dup;dup=&arry[0][0];for (int i=0; i<row; i++){for (int j=0; j<col; j++){printf ("%d \t", *(dup+i*col+j));}printf("\n");}int (*pp)[col]=arry;printf("\n1列的首位元素\n");for(int k=0;k<row;k++){printf(" %d ",*pp[k]); //列的首位元素}printf("\n");printf("\n2第一行的遍历值\n");for(int k=0;k<row;k++){printf(" %d ",(*pp)[k]); //第一行的遍历值}printf("\n");}
/*** @brief** @param arry 二维数组* @param intlength 行列共长度 row*col* @return int*/
int pointDisplay2(int arry[10][10],int intlength)
{printf("\n9 指针遍历二维数组\n");//int llen=4*5;for(int i=0;i<intlength;++i){printf(" %d\t",*(*arry+i));}printf("\n");}/*** @brief   可以** @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/
int pointDisplay3(int** arry,int row,int col)
{//在main 中直接使用可以printf("\n10 指针遍历二维数组\n");int *ddpp;//=*arry;for(int i=0;i<row;++i){ddpp=*(arry+i);for (int j = 0; j < (col-1); j++) {printf(" %d ",*(ddpp+j));}printf("\n");}printf("\n");
}
/*** @brief       Ok* @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/
int pointDisplay4(int** arry,int row,int col)
{printf("\n11 指针遍历二维数组\n");for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {printf("%d ", arry[i][j]);}printf("\n");}printf("\n");
}
/*** @brief    ok  * @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/
int pointDisplay6(int** arry,int row,int col)
{printf("\n13 指针遍历二维数组\n");for (int i = 0; i < row; i++) {//printf("Address of %d th array %u \n",i , *(arry + i));for (int j = 0; j < col; j++) {printf("%d ", *( *(arry + i) + j));}printf("\n");}printf("\n");
}
/*** @brief    OK  * @param arry 二维数组* @param row 行长度* @param col 列长度* @return int*/
int pointDisplay5(int*** arry,int row,int col)
{printf("\n12 指针遍历二维数组\n");for (int i = 0; i <row; i++) {for (int j = 0; j <col; j++){printf("%d ", *arry[i][j]);}printf("\n");}printf("\n");
}/*** @brief  释放所有堆内存    * @param ps* @param n**/
void freeMemoryChar(char **ps,size_t n)
{for(size_t i=0;i<n;n++){free(ps[i]);ps[i]=NULL;}free(ps);ps=NULL;
}/*** @brief   释放所有堆内存   * @param ps* @param n**/
void freeMemoryInt(int **ps,size_t n)
{for(size_t i=0;i<n;n++){free(ps[i]);ps[i]=NULL;}free(ps);ps=NULL;
}

调用:

windows 10:

int main()
{printf("hello c world \n");printf("你好,中国\n");// stringInputSort();int arrdu[5][4]={{10,20,30,40},{50,60,70,80},{90,100,110,120},{130,140,150,160},{170,180,190,200}       };// 4 列int dum=4;//5 行int dun=5;for(int i = 0; i <dun ; i++){for (int j = 0; j < dum; j++) {printf("%d ", arrdu[i][j]);}printf("\n");}printf("\n\n");for(int i = 0; i <dun ; i++){printf("Address of %d th array %u \n",i , *(arrdu + i));for(int j = 0; j <dum ; j++){printf("arr[%d][%d]=%d\n", i, j, *( *(arrdu + i) + j) );}printf("\n\n");}int* ptr = malloc((dum * dun) * sizeof(int));/* Putting 1 to 12 in the 1D array in a sequence */for (int i = 0; i < dun * dum; i++)ptr[i] = i + 1;//int** pe;//pe=arrdu;/**///分配内存int** pe = (int**)malloc(sizeof(int)*dum);for(int i=0; i<dun; i++){pe[i] = (int*)malloc(sizeof(int)*dum);}//初始化内存//memset(*pe, 0, sizeof(int)*dum*dun);//2分配内存int*** arr2 = malloc(dum * sizeof(int**));for (int i = 0; i < dun; i++)arr2[i] = malloc(dun * sizeof(int*));// Initialising each element of the// pointer array with the address of// element present in the other arrayfor (int i = 0; i <dun; i++) {for (int j = 0; j <dum ; j++) {arr2[i][j] = &arrdu[i][j];}}printf("The values are\n");for (int i = 0; i <dun ; i++) {for (int j = 0; j <dum ; j++) {printf("%d ", *arr2[i][j]);}printf("\n");}//strcpy(pe,arrdu);for (int i = 0; i <dun ; i++){for (int j = 0; j <dum ; j++){pe[i][j]= arrdu[i][j];//ptr[i][j]=arrdu[i][j];//strcpy(pe[i][j],arrdu[i][j]);printf("%d\n",arrdu[i][j]);}          }printf("PE The values are\n");for (int i = 0; i < dun; i++) {for (int j = 0; j <dum ; j++) {printf("%d ", pe[i][j]);}printf("\n");}pointDisplay0(arrdu,dun,dum); //okpointDisplay4(pe,dun,dum); //okpointDisplay5(arr2,dun,dum); //okpointDisplay6(pe,dun,dum); //okpointDisplay2(arrdu,dum*dun); //okpointDisplay3(pe,dun,dum);pointDisplay(pe,dun,dum);  //12pointDisplay1(pe,dun,dum);  //12//释放资源free(pe);free(arr2);pe=NULL;arr2=NULL;system("pause");// linux 无效 ,只win 下有效return 0;}

window10 or Ubuntu 20.4

#include "include/twoDimensional.h"int main()
{printf("hello c world, \n");printf("你好,中国\n");//setlocale(LC_ALL,"CN");//int arrdu[5][4]={10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200};int arrdu[5][4]={{10,20,30,40},{50,60,70,80},{90,100,110,120},{130,140,150,160},{170,180,190,200}       };//5 行int dun=5;// 4 列int dum=4;for(int i = 0; i <dun ; i++){for (int j = 0; j < dum; j++) {printf("%d ", arrdu[i][j]);}printf("\n");}printf("\n\n");for(int i = 0; i <dun ; i++){printf("Address of %d th array %u \n",i , *(arrdu + i));for(int j = 0; j <dum ; j++){printf("arr[%d][%d]=%d\n", i, j, *( *(arrdu + i) + j) );}printf("\n\n");}int* ptr = malloc((dum * dun) * sizeof(int));/* Putting 1 to 12 in the 1D array in a sequence */for (int i = 0; i < dun * dum; i++)ptr[i] = i + 1;//int** pe;//pe=arrdu;/**///分配内存// int** pe = (int**)malloc(sizeof(int)*dum);// for(int i=0; i<dun; i++)//{//pe[i] = (int*)malloc(sizeof(int)*dum);//}//分配内存//int** pe = (int**)malloc(sizeof(int)*dum);int** pe =malloc(dum * sizeof(int**));// (int**)malloc(sizeof(int)*dum);for(int i=0; i<dun; i++){pe[i] =malloc(dun * sizeof(int*));// (int*)malloc(sizeof(int)*dun); //dum}//初始化内存//memset(*pe, 0, sizeof(int)*dum*dun);//2分配内存int*** arr2 = malloc(dum * sizeof(int**));for (int i = 0; i < dun; i++)arr2[i] = malloc(dun * sizeof(int*));// Initialising each element of the// pointer array with the address of// element present in the other arrayfor (int i = 0; i <dun; i++) {for (int j = 0; j <dum ; j++) {arr2[i][j] = &arrdu[i][j];}}printf("The values are\n");for (int i = 0; i <dun ; i++) {for (int j = 0; j <dum ; j++) {printf("%d ", *arr2[i][j]);}printf("\n");}//strcpy(pe,arrdu);for (int i = 0; i <dun ; i++){for (int j = 0; j <dum ; j++){pe[i][j]= arrdu[i][j];//ptr[i][j]=arrdu[i][j];//strcpy(pe[i][j],arrdu[i][j]);printf("%d\n",arrdu[i][j]);}          }printf("PE The values are\n");for (int i = 0; i < dun; i++) {for (int j = 0; j <dum ; j++) {printf("%d ", pe[i][j]);}printf("\n");}pointDisplay0(arrdu,dun,dum); //okpointDisplay4(pe,dun,dum); //okpointDisplay5(arr2,dun,dum); //okpointDisplay6(pe,dun,dum); //okpointDisplay2(arrdu,dum*dun); //okpointDisplay3(pe,dun,dum);pointDisplay(pe,dun,dum);  //12pointDisplay1(pe,dun,dum);  //12//释放资源free(pe);free(arr2);pe=NULL;arr2=NULL;//system("pause");// linux 无效 ,只win 下有效return 0;}

修改一下内存分配,各系统就都可以用。

     //分配内存
//int** pe = (int**)malloc(sizeof(int)*dum);
int** pe =malloc(dum * sizeof(int**));// (int**)malloc(sizeof(int)*dum);
for(int i=0; i<dun; i++)
{pe[i] =malloc(dun * sizeof(int*));// (int*)malloc(sizeof(int)*dun); //dum
}

输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/174795.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VPS是什么?详解亚马逊云科技Amazon Lightsail(VPS)虚拟专用服务器

2006年&#xff0c;南非开普敦&#xff0c;亚马逊推出了WBS&#xff0c;以网络服务的形式向企业提供基础的IT服务。亚马逊云科技的一小步&#xff0c;在无数技术更迭&#xff0c;天才设计师和程序员的努力与基础设施建设的完善之下成为了人类科技进展的一大步。 亚马逊云科技可…

电路的电线的拼接

不积跬步无以至千里&#xff0c;今天小编也是复习今天学习的内容&#xff0c;废话不多说&#xff0c;看博客吧&#xff01;&#xff01;&#xff01; 目录 准备条件 操作 成品 准备条件 操作 将定制的套管插入导线当中&#xff0c;24V或者0V是尖端的端子&#xff0c;后面根…

web前端常见开发工具汇总 你用过几个?

搬运旗下公众号的内容~ 目录 1.记事本 2.Visual studio code 3.Hbuilder 4.Eclipse 5.Webstorm 6.Notepad 随着信息时代的不断进步&#xff0c;互联网在人类社会中所占的地位愈发举足轻重。大大小小的网站&#xff0c;构成了如今光怪陆离的网络社会。我们知道&#xff0c…

Sprint Cloud Stream整合RocketMq和websocket实现消息发布订阅

1.引入RocketMQ依赖&#xff1a;首先&#xff0c;在pom.xml文件中添加RocketMQ的依赖&#xff1a; <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.0</versi…

轻量级 IDE 文本编辑器 Geany 发布 2.0

Geany 是功能强大、稳定、轻量的开发者专用文本编辑器&#xff0c;支持 Linux、Windows 和 macOS&#xff0c;内置支持 50 多种编程语言。 2005 年Geany 发布首个版本 0.1。上周四刚好是 Geany 诞生 18 周年纪念日&#xff0c;官方发布了 2.0 正式版以表庆祝。 下载地址&#…

正则表达式引擎比较(翻译自:A comparison of regex engines)

原文&#xff1a; A comparison of regex engines – Rust Leipzig 引言 正则表达式&#xff08;或简称regex&#xff09;通常用于模式搜索算法。 有许多不同的正则表达式引擎提供不同的表达式支持、性能约束和语言绑定。 基于 John Maddock 之前的工作 (regex comparison)和…

window11 更改 vscode 插件目录,释放C盘内存

由于经常使用vscode开发会安装一些代码提示插件&#xff0c;然后C盘内容会逐渐缩小&#xff0c;最终排查定位到vscode。这个吃内存不眨眼的家伙。 建议&#xff1a;不要把插件目录和vscode安装目录放在同一个位置&#xff0c;不然这样vscode更新后&#xff0c;插件也会消失。 v…

Git窗口打开vim后如何退出编辑(IDEA/Goland等编辑器)

最近在学习git高级操作过程中&#xff0c;遇到了一下问题&#xff1a; 我在学习Git合并多个commit为一个的时候&#xff0c;需要输入一个命令 git rebase -i HEAD~2 这说明已经是编辑模式了。当我写好后&#xff0c;我还按照原来在linux上的按下ESC键&#xff0c;但是只是光…

【数据结构】数组和字符串(四):特殊矩阵的压缩存储:稀疏矩阵——三元组表

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表结构体初始化元素设置打印矩阵主函数输出结果代码整合 4.2.1 矩阵的数组表示 【数据结构】数组和字符串&#xff08;一&#xff…

双11满减大促,直播间1折抢购!

你是知道的&#xff0c;双11本来是光棍节&#xff01; 2009年&#xff0c;阿里掀起了一场网络促销活动&#xff0c;光棍节从此成了全民的购物节&#xff01; 从2009年到2021年&#xff0c;阿里双11当天的交易额&#xff0c;从仅有的0.5亿猛增至5403亿&#xff0c;以惊人的速度…

目标检测及锚框、IoU

文章目录 1. 目标检测2. 锚框3. IoU - 交并比4. 赋予锚框标号5. 使用非极大值抑制&#xff08;NMS&#xff09;输出 1. 目标检测 物体检测&#xff08;目标检测&#xff09;是计算机视觉和数字图像处理的热门方向&#xff0c;意在判断一幅图像上是否存在感兴趣物体&#xff0c…

List的add(int index,E element)陷阱,不得不防

项目场景&#xff1a; 项目中有两个List列表&#xff0c;一个是List1用来存储一个标识&#xff0c;后续会根据这个标识去重。 一个List2是用来返回对象的&#xff0c;其中对象里也有一个属性List3。现需要将重复的标识数据追加到List3 我想到的两个方案&#xff1a; 尽量不动…

C/S架构和B/S架构

1. C/S架构和B/S架构简介 C/S 架构&#xff08;Client/Server Architecture&#xff09;和 B/S 架构&#xff08;Browser/Server Architecture&#xff09;是两种不同的软件架构模式&#xff0c;它们描述了客户端和服务器之间的关系以及数据交互的方式。 C/S 架构&#xff08…

diffusion model (八) Dalle3 技术小结

paper&#xff1a;https://cdn.openai.com/papers/dall-e-3.pdf 创建时间&#xff1a; 2023-10-25 相关阅读 diffusion model&#xff08;一&#xff09;DDPM技术小结 (denoising diffusion probabilistic)diffusion model&#xff08;二&#xff09;—— DDIM技术小结diffu…

机器人入门(四)—— 创建你的第一个虚拟小车

机器人入门&#xff08;四&#xff09;—— 创建你的第一个虚拟小车 一、小车建立过程1.1 dd_robot.urdf —— 建立身体1.2 dd_robot2.urdf —— 添加轮子1.3 dd_robot3.urdf —— 添加万向轮1.4 dd_robot4.urdf —— 添加颜色1.5 dd_robot5.urdf —— 添加碰撞检测(Collision …

最近面试遇到的高频面试题

大家好&#xff0c;我是 jonssonyan 互联网寒冬&#xff1f;金九银十真的不存在了么&#xff1f;虽说现在行情是差了一些&#xff0c;面试机会少了一些&#xff0c;但是大部分公司还是或多或少的招人&#xff0c;春招秋招都在进行。有人离职就有人入职。所以如果你还没约到面试…

【Linux】安装与配置虚拟机及虚拟机服务器坏境配置与连接

目录 操作系统介绍 什么是操作系统 常见操作系统 UNIX操作系统 linux操作系统 mac操作系统 嵌入式操作系统 个人版本和服务器版本的区别 安装VMWare虚拟机 VMWare虚拟网卡 ​编辑 配置虚拟网络编辑器 ​编辑 安装配置Windows Server 2012 R2 安装Windows Server 2…

钉钉超过90天的文件需要一分钟重新激活的实现原理是什么?

具体实现原理可能包括以下几点&#xff1a; 冷热数据分类&#xff1a;系统会根据文件的访问频率将文件分为热数据和冷数据两类。热数据是经常被访问的文件&#xff0c;这些文件会被存储在快速的存储设备上&#xff0c;以便快速访问。冷数据是很少被访问的文件&#xff0c;这些…

小红书app拉新上线了 适合网推社群和校园渠道作业

小红书app签到拉新上线了可以通过“聚量推客”进行申请&#xff0c;下面大概是要求和流程 要求网推社群渠道或者地推校园渠道&#xff0c;其它类型渠道禁止