首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >返回结构的数组时出现问题

返回结构的数组时出现问题
EN

Stack Overflow用户
提问于 2019-12-07 23:01:03
回答 1查看 42关注 0票数 0

我是一个新手,我对类型结构的数组有问题。我真的不知道在哪里指定数组是指针,在哪里不指定它。所以,不管我在声明和函数调用中对指针做了什么组合,涉及这个结构数组,它都不会编译。你知道为什么吗?下面是有问题的代码:

代码语言:javascript
运行
AI代码解释
复制
typedef struct{
  char letter[7];
} player;

player init_player(){
  player tab[2];

  char letter_player1[4]={' ','a','b','c'};
  char letter_player2[4]={' ','x','y','z'};
  strcpy(tab[1].letter,letter_player1);
  strcpy(tab[2].letter,letter_player2);

  return *tab;
}

void displaying(player tab){
  int position=1;
  printf("%c\n",*tab[1].letter[position]);
}

int main(){
  player tab=init_player(tab);
  displaying(tab);
}

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-08 00:03:42

你的代码是如何出错的:

代码语言:javascript
运行
AI代码解释
复制
/* required #include (or function prototypes) are not written */

typedef struct{
  char letter[7];
} player;

player init_player(){ /* the return type is not for returning arrays */
  player tab[2];

  /* no terminating null characters are placed, so cannot be used with strcpy() */
  char letter_player1[4]={' ','a','b','c'};
  char letter_player2[4]={' ','x','y','z'};
  strcpy(tab[1].letter,letter_player1);
  strcpy(tab[2].letter,letter_player2); /* only tab[0] and tab[1] are available, tab[2] is out-of-bounds */

  return *tab; /* not the array but only the first element of the array is returned */
}

void displaying(player tab){ /* the argument type is not for getting arrays */
  int position=1;
  /* even if tab were an array(pointer), dereferencing is done via [] operator, so you don't need * here */
  printf("%c\n",*tab[1].letter[position]);
}

int main(){
  player tab=init_player(tab); /* the variable type is not for dealing with arrays */
  displaying(tab);
}

修复方法:

代码语言:javascript
运行
AI代码解释
复制
/* add #include */
#include <stdio.h> /* for printf() */
#include <stdlib.h> /* for malloc(), free() and exit() */
#include <string.h> /* for strcpy() */

typedef struct{
  char letter[7];
} player;

/* change return type to return a pointer */
player* init_player(){
  /* you cannot use non-static local array, so instead dynamically allocate an array here */
  player* tab = malloc(sizeof(*tab) * 2);

  /* add terminating null characters (increase array size, and they will be automatically added) */
  char letter_player1[5]={' ','a','b','c'};
  char letter_player2[5]={' ','x','y','z'};

  if (tab == NULL) exit(1); /* for in case the allocation failed */
  /* use tab[0] and tab[1] instead of tab[1] and tab[2] */
  strcpy(tab[0].letter,letter_player1);
  strcpy(tab[1].letter,letter_player2);

  return tab; /* return the (pointer to the first element of) array */
}

/* change argument type to get a pointer */
void displaying(player* tab){
  int position=1;
  /* remove extra * (indirection operator) */
  printf("%c\n",tab[1].letter[position]);
}

int main(){
  /* change variable type to store a pointer */
  player* tab=init_player(tab);
  displaying(tab);
  free(tab); /* the array is dynamically allocated, so clean-up it */
}

您不需要tab传递给init_player()的参数,但它是无害的,因为init_player()可以接受任何参数,并且这些参数不会被使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59230991

复制
相关文章
Bootstrap行和列
在Bootstrap中,行(Row)和列(Column)是构建响应式网格布局的核心组件。它们允许我们创建灵活的网格系统,以便在不同的屏幕尺寸下进行布局。
堕落飞鸟
2023/05/17
2.1K0
八种创建等高列布局【出自w3c】
高度相等列在Web页面设计中永远是一个网页设计师的需求。如果所有列都有相同的背景色,高度相等还是不相等都无关紧要,因为你只要在这些列的父元素中设置一个背景色就可以了。但是,如果一个或多个列需要单独设置自己的背景色,那么它的视觉完整性的设计就显得非常重要了。大家都知道当初Table实现等高列布局是多么的简单,但是我们使用CSS来创建等高列布局并非是那么容易的事情。
用户3055976
2018/09/12
1.3K0
八种创建等高列布局【出自w3c】
SQL中的行转列和列转行
SQL是IT行业很多岗位都要求具备的一项能力,对于数据岗位而言更是如此,甚至说扎实的SQL基础也往往是入职这些岗位的必备技能。而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可以说这也是一道经典的SQL题目,本文就这一问题做以介绍分享。
luanhz
2021/06/25
7.2K0
行存储和列存储的优缺点
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159308.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/14
1.7K0
列存储、行存储
Sybase在2004年左右就推出了列存储的Sybase IQ数据库系统,主要用于在线分析、数据挖掘等查询密集型应用。列存储,缩写为DSM,相对于NSM(N-ary storage model),其主要区别在于:
全栈程序员站长
2022/09/14
7.9K0
列存储、行存储
SQL 中的行转列和列转行
行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT…CASE 语句中所指定的语法更简单、更具可读性。下面我们通过几个简单的例子来介绍一下列转行、行转列问题。
玖柒的小窝
2021/11/08
5.6K0
SQL 中的行转列和列转行
Python的可散列对象
注: 本文是对《跟老齐学Python:轻松入门》和《Python大学实用教程》有关字典对象的学习补充和提升。更多有关这两本书的资料,请阅读如下链接:
老齐
2021/03/11
5K0
Python的可散列对象
Pandas DataFrame显示行和列的数据不全
pd.set_option('display.max_columns', None)
用户7886150
2020/12/26
6.8K0
SQL行转列、列转行
这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。
全栈程序员站长
2022/07/21
1.6K0
SQL行转列、列转行
hive行转列/列转行
先用concat_ws函数将将星座和血型用“,”连接后group by 用collect_set函数对name聚合,用concat_ws函数对聚合后的name用“|”分割
chimchim
2022/11/13
2K0
hive行转列/列转行
行观点与列观点
行观点xA 行观点 列观点Ax 列观点
坑吭吭
2018/10/11
5590
行观点与列观点
dataframe行变换为列
使用 import org.apache.spark.sql.functions 里面的函数,具体的方式可以看 functions :
机器学习和大数据挖掘
2019/07/01
1.1K0
mysql行转列、列转行
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130537.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/01
7K0
mysql行转列、列转行
mysql行转列,列转行
行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT...CASE 语句中所指定的语法更简单、更具可读性。下面我们通过几个简单的例子来介绍一下列转行、行转列问题。
yaphetsfang
2020/07/30
9.9K0
mysql行转列,列转行
列存储、行存储之间的关系和比较
Sybase在2004年左右就推出了列存储的Sybase IQ数据库系统,主要用于在线分析、数据挖掘等查询密集型应用。列存储,缩写为DSM,相对于NSM(N-ary storage model),其主要区别在于:
全栈程序员站长
2022/09/15
6.7K0
列存储、行存储之间的关系和比较
python treeview行和列边框属性设置
matinal
2023/10/13
4230
SQL 行转列,列转行
PIVOT 后跟一个聚合函数来拿到结果,FOR 后面跟的科目是我们要转换的列,这样的话科目中的语文、数学、英语就就被转换为列。IN 后面跟的就是具体的科目值。
李英杰同学
2019/12/30
2.1K0
行存储 VS 列存储
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/09/27
1.4K0
行存储 VS 列存储
Python3列表和元组
数据结构是以某种方式组合起来的数据元素的集合。在Python中基本的数据结构就是序列
py3study
2020/01/13
1.3K0
行存储 VS 列存储[通俗易懂]
目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,基本是淘汰出局。在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。
全栈程序员站长
2022/09/14
4.8K0
行存储 VS 列存储[通俗易懂]

相似问题

在R中打印多个绘图时更改绘图大小

20

用Live图对多个子图进行实时绘图

10

为什么在使用展开图进行处理时不显示标记?

11

为什么EventTarget子类实例会丢失它们的名称?

19

在单循环中使用子图对多个图形进行绘图

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文