有关C语言的小问题

#include<stdio.h>#include<stdlib.h>#include<malloc.h>structArr{int*pbase;intlen;intcn... # include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
struct Arr
{
int * pbase;
int len;
int cnt;
};

void initarr(struct Arr * parr,int len);
bool appendarr(struct Arr * parr , int val);
bool insertarr();
bool deletearr();
int get();
bool isempty(struct Arr * parr);
bool isfull();
void sortarr();
void showarr(struct Arr * parr);
void inversearr();

int main(void)
{
struct Arr arr;
initarr(&arr,6);
showarr(&arr);
appendarr(&arr,1);
appendarr(&arr,2);
appendarr(&arr,3);
showarr(&arr);
return 0;
}

void initarr(struct Arr * parr, int len)
{
parr ->pbase = (int *)malloc(sizeof(int) * len);
if (NULL == parr ->pbase){
printf("动态内存分配失败!\n");
exit(-1);
}
parr ->len = len;
parr ->cnt = 0;
}

bool isfull(struct Arr * parr)
{
if (parr ->cnt == parr ->len)
return true;
else
return false;
}

bool isempty(struct Arr * parr)
{
if (0 == parr ->cnt)
return true;
else
return false;
}

void showarr(struct Arr *parr)
{
if (isempty(parr))
printf("数组为空!\n");
else
for (int i = 0;i < parr->pbase[i]; i++)
printf("%d ",parr[i]);
}
bool appendarr(struct Arr * parr , int val)
{
if (isfull(parr))
return false;
parr ->pbase[parr ->cnt] = val;
parr ->cnt ++;
return true;
}

输出结果为: 数组为空!
3477256 1245064 3477752
为什么不是输出1,2,3,跪求大神,真心感谢!
这道题解决了,只是没有财富值删不了,大家别看
展开
 我来答
仍易阙铃
2019-11-07 · TA获得超过3万个赞
知道小有建树答主
回答量:1.1万
采纳率:26%
帮助的人:844万
展开全部
问题一,那是逗号表达式,括号内依次运算,取最后的值为结果,所以是3而不是1,这个是定义了的,没有为什么,记住就好;问题二,3%5是3,因为这是取余运算,就是简单的取余数,不用想的很复杂,和除法有区别!、
贵高驰史飞
2019-01-07 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:34%
帮助的人:897万
展开全部
第一个循环完成之后i=10
在第二个循环一开始,打印出a[10],但你的数组只有a[0]到a[9]十个数据,a[10]内存越界,是随机数
解决办法是在第一个循环完成后i=i-1即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
受映冬俟山
2019-12-02 · TA获得超过3万个赞
知道大有可为答主
回答量:1.2万
采纳率:28%
帮助的人:969万
展开全部
答案是D,(1,3)那是逗号运算,从左至右算,所以结果是3
3%5==3,“%”前后必须是整型的,3%5就是求余运算,如果是3/5,则是3/5==0。你懂了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JuedyHack
2017-10-16
知道答主
回答量:9
采纳率:0%
帮助的人:4.9万
展开全部

line 69: 函数showarr,parr是指向结构体的指针,你这里要访问的应该是它的成员数组parr->pbase

void showarr(struct Arr *parr)
{
if (isempty(parr))
printf("数组为空!\n");
else
for (int i = 0;i < parr->pbase[i]; i++)
printf("%d ",parr->pbase[i]);
}

ps1:这个问题在编译阶段通常会有警告的,因为printf格式符%d是整数,你给的parr[i]跟它是不匹配的,会引起“format %d expect argument of type”的警告;

ps2:代码写得不规范,这里仅指出一点,调的库是C的,bool变量用的C++的,在稍早些的C标准里面是没有的。这样写在很多编译器上是过不了的

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
御巧蛮水凡
2019-12-07 · TA获得超过3768个赞
知道大有可为答主
回答量:3118
采纳率:24%
帮助的人:401万
展开全部
在c语言中,\是转义符号,其后面紧跟着一个字符,两者组合成一个新的字符,代表另外的意思,所以称为转义。
故,
\0表示换行或者回车的意思;在字符串中表示字符串的结尾。
上面的代码意思是,将读入的字符串,对有多少个字符进行统计,字符串最后一位为\0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式