C语言数组处理

IceBear19 2021-04-29 03:13:51
在C语言数组处理的时候发现键入的变量竟然会自己发生了变化,吃惊的我赶紧跑过来问问有没有人知道怎么回事?
代码目的是求不小于num的所有数
代码如下
#include <stdio.h>
int main()
{
int n=0,i;
double b[12]={5,0.3,0.2,1,0.9,3,7,15,10,13,0.1,2},a[n];
double num;

scanf("%lf",&num);
for(i=0;i<12;i++)
{
if(b[i]>=num)
{
a[n++]=b[i];
}
printf("这个倒霉的num变成了%lf\n",num);
}

for(i = 0; i<n; i++)
printf("%.1f ", a[i]);
return 0;
}

最后如果键入0.5的话结果是
这个倒霉的num变成了0.500000
这个倒霉的num变成了0.500000
这个倒霉的num变成了0.500000
这个倒霉的num变成了1.000000
这个倒霉的num变成了1.000000
这个倒霉的num变成了1.000000
这个倒霉的num变成了1.000000
这个倒霉的num变成了1.000000
这个倒霉的num变成了1.000000
这个倒霉的num变成了1.000000
这个倒霉的num变成了1.000000
这个倒霉的num变成了1.000000
5.0 1.0 3.0 7.0 15.0 10.0 13.0 2.0
...全文
1602 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-03
  • 打赏
  • 举报
回复
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
qq_42914371 2021-05-03
  • 打赏
  • 举报
回复
非常不错的解答
自信男孩 2021-04-30
  • 打赏
  • 举报
回复
引用 10 楼 lin5161678 的回复:
[quote=引用 9 楼 自信男孩 的回复:][quote=引用 8 楼 lin5161678 的回复:]错的就只是 vla长度是0 并且越界 这两点
和指针没有任何关系


理解不一样~[/quote]
那就是你理解错了[/quote]
把数组理解为指针有错吗(当然数组和指针还是有区别的)?数组名除了不能做左值外,还有其他的区别吗?
lin5161678 2021-04-30
  • 打赏
  • 举报
回复
引用 9 楼 自信男孩 的回复:
[quote=引用 8 楼 lin5161678 的回复:]错的就只是 vla长度是0 并且越界 这两点 和指针没有任何关系
理解不一样~[/quote] 那就是你理解错了
自信男孩 2021-04-30
  • 打赏
  • 举报
回复
引用 8 楼 lin5161678 的回复:
[quote=引用 7 楼 自信男孩 的回复:][quote=引用 6 楼 lin5161678 的回复:][quote=引用 3 楼 自信男孩 的回复:]a数组的长度需要事先定义好,C语言不支持可变数组长度的。
C支持
这里错的不是用变了定义数组大小
这里错的是越界 并且数组大小是0 [/quote]
这里定义的其实就是一个指针,还是一个野指针。对于野指针的使用结果是未定义的。

可变数组可能描述的有歧义,这个在C语言里应该怎么描述呢?应该描述成:不定长数组;当然这里也不是不定长的,而是指定义了一个长度不足的(或者直接理解为一个野指针或许更好)[/quote]错的就只是 vla长度是0 并且越界 这两点
和指针没有任何关系[/quote]

理解不一样~
lin5161678 2021-04-30
  • 打赏
  • 举报
回复
引用 7 楼 自信男孩 的回复:
[quote=引用 6 楼 lin5161678 的回复:][quote=引用 3 楼 自信男孩 的回复:]a数组的长度需要事先定义好,C语言不支持可变数组长度的。
C支持 这里错的不是用变了定义数组大小 这里错的是越界 并且数组大小是0 [/quote] 这里定义的其实就是一个指针,还是一个野指针。对于野指针的使用结果是未定义的。 可变数组可能描述的有歧义,这个在C语言里应该怎么描述呢?应该描述成:不定长数组;当然这里也不是不定长的,而是指定义了一个长度不足的(或者直接理解为一个野指针或许更好)[/quote]错的就只是 vla长度是0 并且越界 这两点 和指针没有任何关系
自信男孩 2021-04-30
  • 打赏
  • 举报
回复
引用 6 楼 lin5161678 的回复:
[quote=引用 3 楼 自信男孩 的回复:]a数组的长度需要事先定义好,C语言不支持可变数组长度的。
C支持
这里错的不是用变了定义数组大小
这里错的是越界 并且数组大小是0 [/quote]
这里定义的其实就是一个指针,还是一个野指针。对于野指针的使用结果是未定义的。

可变数组可能描述的有歧义,这个在C语言里应该怎么描述呢?应该描述成:不定长数组;当然这里也不是不定长的,而是指定义了一个长度不足的(或者直接理解为一个野指针或许更好)
lin5161678 2021-04-30
  • 打赏
  • 举报
回复
引用 3 楼 自信男孩 的回复:
a数组的长度需要事先定义好,C语言不支持可变数组长度的。
C支持 这里错的不是用变了定义数组大小 这里错的是越界 并且数组大小是0
自信男孩 2021-04-30
  • 打赏
  • 举报
回复
引用 30 楼 lin5161678 的回复:
[quote=引用 27 楼 自信男孩 的回复:]

你解析的通透,能被别人理解吗?你通透了,那是你的,不能给别人。在论坛里是帮助别人解决问题,不是炫耀你理解的通透了。

愿意思考当然能够理解
请问 数组类型在特定情况下会隐式转换为指向数组第一个元素的指针 而不是数组是指针
这句话 哪一个字不理解?
没有先入为主并且放弃思考的人 都能理解这句话[/quote]
我真没说过数组就是指针吧,如果说了,那我确实说错了,我道歉,向楼主和看到的帖子的朋友们道歉:我传播了错误的论点。

自信男孩 2021-04-30
  • 打赏
  • 举报
回复
引用 32 楼 均陵鼠侠 的回复:
[quote=引用 28 楼 自信男孩 的回复:][quote=引用 25 楼 均陵鼠侠 的回复:]我的发言看起来象是在吵架吗?这是从哪里看出来的。我本不想参与这个讨论,但是看到小林同学在场,所以也掺和一下。如果觉得我是在吵架,我就不说话了,反正CSDN我很少来,就是隔一段时间来瞅瞅。我又不拿CSDN的好处,没必要在这里为一些非常简单的话题浪费时间。

代码写出来是让别人看的,不是炫耀的。写出对的,但是别人不容易理解的代码,意义仅限于自己的吧,代码的可读性呢?

int g;
( & g) [0] = 5;

对于这样的代码~[/quote]我都不知道说什么好了,你为什么总抓不住重点。我强调的是要引入“整数名”和“浮点名”,而且认为“整数名也是数组,也是指针”,所以举了这样一个例子,你又往代码的可读性上扯。没有可读性就不是代码了?没有可读性就不能运行了?它是不是合法的C语言代码呢?这样唠嗑啥时候才能是个头哇。[/quote]
那就不要唠了,那你还回复啥呀~既然知道没有头,越来越不在楼主的频道上了。嘴上说着没意思唠了,手上还很诚实~
均陵鼠侠 2021-04-30
  • 打赏
  • 举报
回复
引用 28 楼 自信男孩 的回复:
[quote=引用 25 楼 均陵鼠侠 的回复:]我的发言看起来象是在吵架吗?这是从哪里看出来的。我本不想参与这个讨论,但是看到小林同学在场,所以也掺和一下。如果觉得我是在吵架,我就不说话了,反正CSDN我很少来,就是隔一段时间来瞅瞅。我又不拿CSDN的好处,没必要在这里为一些非常简单的话题浪费时间。
代码写出来是让别人看的,不是炫耀的。写出对的,但是别人不容易理解的代码,意义仅限于自己的吧,代码的可读性呢?
int g;
( & g) [0] = 5;
对于这样的代码~[/quote]我都不知道说什么好了,你为什么总抓不住重点。我强调的是要引入“整数名”和“浮点名”,而且认为“整数名也是数组,也是指针”,所以举了这样一个例子,你又往代码的可读性上扯。没有可读性就不是代码了?没有可读性就不能运行了?它是不是合法的C语言代码呢?这样唠嗑啥时候才能是个头哇。
lin5161678 2021-04-30
  • 打赏
  • 举报
回复
引用 29 楼 均陵鼠侠 的回复:
我说小林,我在#24楼的发言难道不好笑吗?为什么不笑?[/quote] 我受过严格的训练 无论有多好笑 我都不会笑 除非忍不住
lin5161678 2021-04-30
  • 打赏
  • 举报
回复
引用 27 楼 自信男孩 的回复:
你解析的通透,能被别人理解吗?你通透了,那是你的,不能给别人。在论坛里是帮助别人解决问题,不是炫耀你理解的通透了。
愿意思考当然能够理解 请问 数组类型在特定情况下会隐式转换为指向数组第一个元素的指针 而不是数组是指针 这句话 哪一个字不理解? 没有先入为主并且放弃思考的人 都能理解这句话
均陵鼠侠 2021-04-30
  • 打赏
  • 举报
回复
引用 26 楼 lin5161678 的回复:
[quote=引用 22 楼 自信男孩 的回复:]
我说小林,我在#24楼的发言难道不好笑吗?为什么不笑?
自信男孩 2021-04-30
  • 打赏
  • 举报
回复
引用 25 楼 均陵鼠侠 的回复:
我的发言看起来象是在吵架吗?这是从哪里看出来的。我本不想参与这个讨论,但是看到小林同学在场,所以也掺和一下。如果觉得我是在吵架,我就不说话了,反正CSDN我很少来,就是隔一段时间来瞅瞅。我又不拿CSDN的好处,没必要在这里为一些非常简单的话题浪费时间。

代码写出来是让别人看的,不是炫耀的。写出对的,但是别人不容易理解的代码,意义仅限于自己的吧,代码的可读性呢?

int g;
( & g) [0] = 5;

对于这样的代码~
自信男孩 2021-04-30
  • 打赏
  • 举报
回复
引用 26 楼 lin5161678 的回复:
[quote=引用 22 楼 自信男孩 的回复:]
好吧,继续这样的沟通没有意义,我一说访问,你就提出char和int的区别,这么说还有struct ,union等等这些类型访问的区别呢,所以,这样的反驳我无话可说。你理解的并不是我理解的,看来这句话在我们的沟通中是成立的。

建议不要总批判的去理解别人的话,能从对方的话语中理解或吸收有用的东西,这样是进步的源泉,上来就反对,如果反对的全对还好说,不全对,我感觉没多少意义,除了能获取自己很厉害的快感,还能干啥?

你的观点不存在值得吸收的内容
所谓的数组是指针
是一个错误的 对理解C语言毫无帮助 对编程实践毫无价值的说法
并且早就被解析通透并早已被我摒弃

数组隐式转换为指向数组第一个元素 可以解释一切关于数组和指针相关的内容
数组是指针 只会遇到越来越多的困惑 越思考越撕裂 放弃思考才会认为这个解释很合理[/quote]
你的语言里透漏出霸气:

并且早就被解析通透并早已被我摒弃


你解析的通透,能被别人理解吗?你通透了,那是你的,不能给别人。在论坛里是帮助别人解决问题,不是炫耀你理解的通透了。

lin5161678 2021-04-30
  • 打赏
  • 举报
回复
引用 22 楼 自信男孩 的回复:
好吧,继续这样的沟通没有意义,我一说访问,你就提出char和int的区别,这么说还有struct ,union等等这些类型访问的区别呢,所以,这样的反驳我无话可说。你理解的并不是我理解的,看来这句话在我们的沟通中是成立的。 建议不要总批判的去理解别人的话,能从对方的话语中理解或吸收有用的东西,这样是进步的源泉,上来就反对,如果反对的全对还好说,不全对,我感觉没多少意义,除了能获取自己很厉害的快感,还能干啥?
你的观点不存在值得吸收的内容 所谓的数组是指针 是一个错误的 对理解C语言毫无帮助 对编程实践毫无价值的说法 并且早就被解析通透并早已被我摒弃 数组隐式转换为指向数组第一个元素 可以解释一切关于数组和指针相关的内容 数组是指针 只会遇到越来越多的困惑 越思考越撕裂 放弃思考才会认为这个解释很合理
均陵鼠侠 2021-04-30
  • 打赏
  • 举报
回复
我的发言看起来象是在吵架吗?这是从哪里看出来的。我本不想参与这个讨论,但是看到小林同学在场,所以也掺和一下。如果觉得我是在吵架,我就不说话了,反正CSDN我很少来,就是隔一段时间来瞅瞅。我又不拿CSDN的好处,没必要在这里为一些非常简单的话题浪费时间。
均陵鼠侠 2021-04-30
  • 打赏
  • 举报
回复
“因为这么理解了,对于很多的使用,比如访问数组或指针地址的方式;便于更好的使用和运用;”------恰恰相反,就是因为和稀泥,搞不清楚,所以很难使用和运用,更谈不上写出优美、简练的代码。你看看赵4老湿平时写的程序就知道了。他的程序我一次也没有读过,太。。。怎么说呢,太闹心了。 我准备建议WG14引入一批新的术语,叫做“整数名”、“浮点名”。而且,因为以下代码
int g;
( & g) [0] = 5;
可以正常工作,所以我决定下一个结论:整数名在某些条件下等同于数组;在某些条件下也等同于指针。
自信男孩 2021-04-30
  • 打赏
  • 举报
回复
引用 21 楼 均陵鼠侠 的回复:
[quote=引用 15 楼 自信男孩 的回复:][quote=引用 14 楼 lin5161678 的回复:][quote=引用 11 楼 自信男孩 的回复:]
把数组理解为指针有错吗(当然数组和指针还是有区别的)?数组名除了不能做左值外,还有其他的区别吗?

首先 数组名是左值表达式
然后 数组理解为指针当然是错的

数组本质是内存中一块连续的内存块 相同类型的元素的集合
指针显然完全另一回事

根本区别 数组是一种聚合类型 指针是一种标量类型
两者是C类型系统完全不同 各自独立的组成部分


(int[10])value //是错的
(int*)value //是对的


sizeof(数组类型)和sizeof(指针类型)有区别

int arr[10];
//&arr 是一个数组指针类型表达式 类型是 int(*)[10]
int* p;
//&p 是一个二级指针表达式 类型是 int**


等等

两者区别多的是

所谓的数组是指针
完全的是对 数组在特定情况下会隐式转换为指向数组第一个元素的指针 这个规则的误读[/quote]

数组和指针在访问上没有区别的,我认为在一些方面是可以将数组理解为指针,也可以把指针理解为数组,你罗列这么多,咱们关注点不一样呢,你关注区别,我专注类似。为什么要关注类似,因为这么理解了,对于很多的使用,比如访问数组或指针地址的方式;便于更好的使用和运用;

指针和数组如果完全一样,我想也没必要定义两个名称了,这个起码的区别我想我还是能够分辨的吧。
比如数组名作为参数传递,那么形参的处理,编译器是按照指针来处理的,虽然你定义的参数是数组形式;

多方面的看待问题,而不是两个面的去评价一个问题:要么对,要么错;不同场景下,可以有不同的理解;

数组和指针有区别又有相似性;我想这个观点你应该认同吧[/quote]

按照这个观点,发明高级语言是错误的,是不必要的。因为这番言论完全否定了抽象的必要性,而高级语言正是对底层以及低一级层次的逻辑抽象。每种语言都要自圆其说,都有其自洽性和完备性,数据类型必须是层次分明的。

分析C语言程序,自然要站在C语言自身的逻辑圈子里进行,你拿汇编语言层面的事物来解释C语言的东西,已经超越了C语言本身的逻辑。更何况,在机器语言里,哪还有什么数组和指针,都是一连串的字节或者比特。[/quote]
你这么理解也没错,但是这是再讨论问题吗?这是在吵架,说一些看是对的,但是与议题无关的内容,这样你觉得很厉害了?
加载更多回复(14)

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧