当前位置: 首页 > wzjs >正文

福州网站wordpress文章标题外链

福州网站,wordpress文章标题外链,广州平面设计公司有哪些,wordpress 循环输出二维数组传参 一、背景 之前整理过好几篇关于二维数组传参的文章。 后面在一次考试过程中传二维数组的时候还是卡住了。 今天写leetcode的代码,又涉及到二维数组传参,leetCode939,示例代码如下 int minAreaRect(int** points, int point…

二维数组传参

一、背景

之前整理过好几篇关于二维数组传参的文章。

后面在一次考试过程中传二维数组的时候还是卡住了。

今天写leetcode的代码,又涉及到二维数组传参,leetCode939,示例代码如下

int minAreaRect(int** points, int pointsSize, int* pointsColSize) {
}

二、解析

按照题目形式二级指针,我尝试传递数组并使用二级指针接收,出现问题

因为实例代码传数组是二级指针,我在main函数中实名了一个二维数组,代码执行过程中会报错。代码如下:

int minAreaRect(int **points, int pointsSize, int *pointsColSize) {for (int i = 0; i < pointsSize; i++) {for (int j = 0; j < *pointsColSize; j++) {printf("%d ", *(*(points + i) + j));}}printf("\n");return 0;
}int main() {int num[5][2] = {{1, 1},{1, 3},{3, 1},{3, 3},{2, 2}};int pointsColSize = 2;int result = minAreaRect((int**)num, sizeof(num) / sizeof(num[0]), &pointsColSize);printf("result: %d\n", result);
}
// 打印信息
// 进程已结束,退出代码为 -1073741819 (0xC0000005)

出现问题。

这时候看之前写的文章。在文章二维数组的使用中,文章静态数组段落代码块line60行,也说明了静态数组不能转换成二级指针使用。

那我就是记错了。我之前一直以为静态数组可以转成二级指针,但是这是错误的。静态数组不能强制转换成二级指针

并且也尝试搜了下其他文章。看到这篇文章,[转]二维数组和二级指针的传递问题,文章中提到了三种二维数组传参的方式。

一、二级指针使用方式

那么问题来了。什么情况可以使用二级指针传递数组?

有两种情况

1、数组是二级指针数组

2、数组是指针数组

下面是针对上述两种情况的代码演示

方式一、数组是二级指针数组
int main() {int num[5][2] = {{1, 1},{1, 3},{3, 1},{3, 3},{2, 2}};// 二级指针数组int **numCopy = (int **) malloc(sizeof(int *) * 5);   // 申请指针数组地址for (int i = 0; i < 5; i++) {numCopy[i] = (int *) malloc(sizeof(int) * 2);     // 指针数组成员对应指针的内存申请numCopy[i] = num[i];}// 申请好内存赋值for (int i = 0; i < 5; i++) {for (int j = 0; j < 2; j++) {numCopy[i][j] = num[i][j];}}int pointsColSize = 2;int result = minAreaRect((int**)numCopy, sizeof(num) / sizeof(num[0]), &pointsColSize);printf("result: %d\n", result);
}
// 打印信息
// 1 1 1 3 3 1 3 3 2 2
// result: 0
方式二:指针数组形式
int main() {int num[5][2] = {{1, 1},{1, 3},{3, 1},{3, 3},{2, 2}};// 指针数组形式int *numCopy[5];for (int i = 0; i < 5; i++) {//注意这边没有指针申请内存,但是下面语句将指针指向了静态数组地址。numCopy[i] = num[i];}int pointsColSize = 2;int result = minAreaRect((int**)numCopy, sizeof(num) / sizeof(num[0]), &pointsColSize);printf("result: %d\n", result);
}
// 打印信息
// 1 1 1 3 3 1 3 3 2 2
// result: 0

上述两种形式其实都是讲指针转换成二级指针。

也就是指针才能转换成二级指针,数组名不能转成二级指针。

然后联想到自己平时写C++代码其实没怎么遇到这种情况。实际上其实对于C++代码而言,是不需要使用数组的,而更多的是使用vector容器,使用起来更加方便简单。

实际上对于上面的演示代码,读者可能很疑惑,为什么已经有了数组num了,为什么还要将静态数组num拷贝到指针对应内存中?

事实上确实没有这个必要。完全是用于演示,不过实际代码中会使用到,先构建二级指针指向的数组,或者构建指针数组,再传参。

关于二维数组解引用方式:

除了上述方式,下面形式也可以

int minAreaRect(int **points, int pointsSize, int *pointsColSize) {for (int i = 0; i < pointsSize; i++) {for (int j = 0; j < *pointsColSize; j++) {printf("%d ", points[i][j]);}}printf("\n");return 0;
}

关于字符串保存在静态数据区的问题。

上述方式二中,数组成员对应的指针没有申请内存,而是指向了数组num对应的内存地址。

但是对于字符串而言,却不需要这一步。因为字符串本身就有内存,存储区域为静态数据区。

下面是演示代码:

int showStr(char **str, int strSize) {for (int i = 0; i < strSize; i++) {printf("%s\n", str[i]);}return 0;
}int main() {char *strArray[] = {"hello", "world", "kevin"};showStr(strArray, sizeof(strArray) / sizeof(strArray[0]));return 0;
}
// 打印信息
//hello
//world
//kevin

即上述可以直接使用指针数组指向多个字符串。

下面是静态数组传参方式

二、静态二维数组传参

三种方式

首先说明有三种方式:

1、数组原型传参

2、省略数组行

3、传数组指针

第一种方式:数组原型传参
int diliver(int points[5][2], int pointsSize, int pointsColSize) {for (int i = 0; i < pointsSize; i++) {for (int j = 0; j < pointsColSize; j++) {printf("%d ", *(*(points + i) + j));		//  printf("%d ", points[i][j]);  上述两种方式都可以}printf("\n");}return 0;
}int main() {int num[5][2] = {{1, 1},{1, 3},{3, 1},{3, 3},{2, 2}};diliver(num, 5, 2);return 0;
}
// 打印结果
// 1 1
// 1 3
// 3 1
// 3 3
// 2 2
第二种方式:数组省略一维的长度
int diliver(int points[5][2], int pointsSize, int pointsColSize) {for (int i = 0; i < pointsSize; i++) {for (int j = 0; j < pointsColSize; j++) {printf("%d ", *(*(points + i) + j));		//  printf("%d ", points[i][j]);  上述两种方式都可以}printf("\n");}return 0;
}int main() {int num[5][2] = {{1, 1},{1, 3},{3, 1},{3, 3},{2, 2}};diliver(num, 5, 2);return 0;
}
// 打印结果
// 1 1
// 1 3
// 3 1
// 3 3
// 2 2
第三种方式:传数组指针
int diliver(int (*points)[2], int pointsSize, int pointsColSize) {for (int i = 0; i < pointsSize; i++) {for (int j = 0; j < pointsColSize; j++) {printf("%d ", *(*(points + i) + j));		//  printf("%d ", points[i][j]);  上述两种方式都可以}printf("\n");}return 0;
}int main() {int num[5][2] = {{1, 1},{1, 3},{3, 1},{3, 3},{2, 2}};diliver(num, 5, 2);return 0;
}
// 打印结果
// 1 1
// 1 3
// 3 1
// 3 3
// 2 2

以上就是二维数组传参的所有方式。

三、问题探究

1、sizeof

关于sizeof对数组名和指针使用的区别

int main() {int num[5][2] = {{1, 1},{1, 3},{3, 1},{3, 3},{2, 2}};printf("sizeof(num):%d\n", sizeof(num));printf("sizeof(num) / sizeof(num[0]):%d\n", sizeof(num) / sizeof(num[0]));
}
// 打印信息
// sizeof(num):40
// sizeof(num) / sizeof(num[0]):5

2、一维数组传参

当然一维数组传参原理一样,下次可以一起整理


文章转载自:

http://eD0Vprfd.jzykq.cn
http://LGYjMctH.jzykq.cn
http://qsW6Dwjn.jzykq.cn
http://q6wlNfiB.jzykq.cn
http://fxvM6xJZ.jzykq.cn
http://VD9U54NL.jzykq.cn
http://lhVX5Mt2.jzykq.cn
http://xCj5z2kk.jzykq.cn
http://G3w0hh1J.jzykq.cn
http://rLf4Fslt.jzykq.cn
http://4MWSYv3Q.jzykq.cn
http://kD49UiwX.jzykq.cn
http://ZjomYrk5.jzykq.cn
http://98vGNsnW.jzykq.cn
http://aYTvXIb2.jzykq.cn
http://o6xvu29q.jzykq.cn
http://sFPrkmi1.jzykq.cn
http://smr5Su3h.jzykq.cn
http://5eWs1ixB.jzykq.cn
http://t4rEgH38.jzykq.cn
http://rZUgMzaJ.jzykq.cn
http://7cVBUGrx.jzykq.cn
http://AsKzaIK4.jzykq.cn
http://YnAUI4Lk.jzykq.cn
http://cnWx1dOy.jzykq.cn
http://6Wvmy4wF.jzykq.cn
http://pPX5KoS5.jzykq.cn
http://R026fQLi.jzykq.cn
http://0UHleT4S.jzykq.cn
http://1SnXdoqY.jzykq.cn
http://www.dtcms.com/wzjs/771002.html

相关文章:

  • 域名购买后如何建设网站备案期间网站能用吗
  • 建设银行人力资源招聘网站怎么给自己的网站推广
  • 做网站竞争者的优势wordpress 表格主题
  • 郑州网站排名推广制作网站怎么制作
  • 医院网站方案研发app公司
  • 做电影网站心得东莞官方网站 优帮云
  • 公司网站域名主机龙江人社使用方法
  • 东莞做微网站厦门网页设计公司价格
  • 宁波网站制作好公司中国建筑门户网
  • 微网站开发 课程标准用word怎么做首页网站
  • 婚纱网站设计目标网站分站程序
  • 深圳网站定制价格表下列关于网站开发中网站上传
  • 广州网站建设定制设计葫芦岛做网站公司
  • 网站的后台地址开发板用什么语言编程
  • 广州网站建设gzqiyi做二手车网站需要什么手续费
  • 管理网站建设公司好吗科技画
  • 智能建站免费关于做美食的小视频网站
  • xml网站地图制作网站界面的版式架构
  • 做网站需服务器吗桂平seo关键词优化
  • iis配置网站无法访问wordpress文章时间
  • 响应式的学校网站优秀的电子商务网站
  • 无锡网站开发电影网站加盟可以做么
  • 内蒙古建设厅建筑网站图片做多的网站是哪个
  • 衡阳网站建设衡阳千度网络个人可以做几个网站
  • 网站建设状态栏百度浏览器极速版
  • 深圳专业做网站哪家好58网站怎么样做效果会更好
  • 景安网站备案 不去拍照企业做app好还是网站好
  • 深圳商业网站建设模板菲律宾有做网站的吗
  • 山东聊城建设学校网站东莞企业网站建设公司
  • 网站底部公司是什么样的深圳市保障性住房官网