回应模式 - No.65033572


No.65033572 - 学业打卡


无标题无名氏No.65033572 返回主串

2025-01-18(六)15:58:16 ID:qk3CGp4 回应

( ゚∀。)放寒假,零编程基础开始看网课学C的打卡串

无标题无名氏No.65270291

2025-02-13(四)15:12:20 ID: qk3CGp4 (PO主)

二维数组arr[a][b]可以理解成a个项数为
b的一维数组的数组。

由此可以解释为何a不必要而b必要:
二维数组里省略a,相当于一维数组省略arr[n]里的项数n,即使不给,也可以根据初始化的值默认计算。

而省略b,就相当于每一个一维数组的项数都未知,面对一坨输入的数据,不知道每个数组分配几个好,没办法按照一定的规律来分配。

诶,( ゚∀。)这么说理论上(缺列不缺行时)可以洪特规则吧,就先每个一维数组挨个分一个,每个都有了再分第二轮。
゚∀゚)σ这个时候也许可以结合一下内存里二维数组存储方式,就相当于是,把b倍数组类型那么大一块连续内存当作最小单位在操作。这样的话其实不太符合数组的通性,也许引发的问题比带来的便利多。

(以上都是po胡乱解释的,欢迎抓虫)

无标题无名氏No.65270406

2025-02-13(四)15:25:35 ID: qk3CGp4 (PO主)

这么理解(指理解成一维数组的集合)很巧妙,也更接近本质,但感觉不太实用,因为结合二维数组来做棋盘游戏的话一个点和周围的9格都会产生关联,拆成一行一行理解起来感觉会更麻烦啊( ゚∀。)

我相信一定有一些证明起来很复杂但就是非常巧合的各种设置之间的联系可以逻辑自洽地把二维数组认作一个平面。
看似鲁莽,实际正确,让人忍不住思考实现的逻辑(实际上根本想不出任何东西(;´ヮ`)7又菜又爱试),或许这就是中级语言的魅力吧

无标题无名氏No.65270484

2025-02-13(四)15:34:15 ID: qk3CGp4 (PO主)

>>No.65270291
我想的数组通性是定义时的数据类型是最小单位,按这个最小单位来连续存储,有行无列时唯一有规律的分配方式就是一行给一个,挨行往下,此时的数据在内存上是跳跃存储的,不符合数组严谨的定义所以不行

无标题无名氏No.65270698

2025-02-13(四)15:59:35 ID: qk3CGp4 (PO主)

>>No.65270584
我也是这么理解的!上面那坨是在尝试解释“为什么这么理解是对的”即使对于实践毫无意义( ;´д`)算是自己的强迫症吧,希望以后能改改

无标题无名氏No.65270992

2025-02-13(四)16:31:27 ID: qk3CGp4 (PO主)

看网课如果有弹幕一定别开
老师在教新知识弹幕一堆“这样效率太低了吧”
(・∀・)你高考考数学怎么不把白卷拍监考脸上跟他说动笔算效率好低呀不考了

无标题无名氏No.65273988

2025-02-13(四)21:37:15 ID: qk3CGp4 (PO主)

闭门造车一晚上三子棋到了最后一步
三子连线怎么判断?
难道下一次判断一次吗?
穷举吗?
那人家写五子棋的又怎么写出来的?

别吵,我在思考( ・_ゝ・)

无标题无名氏No.65276530

2025-02-14(五)01:23:04 ID: qk3CGp4 (PO主)

>>No.65271236
 ↺
( ゚∀。)

 ⚠️
( ゚∀。)7

[ ]是数组下标运算符,b是整形变量,b[a]感觉是报错
数组名在计算时退化为首元素指针,*(a+b) == a[b] 是没有问题的,和加法有什么关联嘛( ゚∀。)

无标题无名氏No.65276580

2025-02-14(五)01:29:17 ID: qk3CGp4 (PO主)

这标识确实挺好玩ᕕ( ᐛ )ᕗ
2.14对本优秀肥肥来讲就是无数平凡重复的日子中不足为奇的一天,明早醒了撸着狗比酱继续c一天

无标题无名氏No.65279763

2025-02-14(五)13:41:59 ID: qk3CGp4 (PO主)

>>No.65277831
(;´Д`)昨晚试过了但太晚了总结着总结着睡着了抱歉

问了AI后醍醐灌顶了!
arr[a][b]==a[arr][b],arr[b][a]==b[arr][a],a和b是整形这些式子也都成立,说明一个问题,[ ]本质是指针运算符,并非和数组绑定,arr在这里就已经是指针了。

[ ]的运算步骤:
1.左右两边一个给个指针,一个给个整数,根据这俩算出偏移后的 新指针。
2.返回新指针解引用的参数。

至于为什么又要取名数组下标运算符,因为其他变量的指针都是散装的,只有数组这种连续的指针才对[ ]这种上下精确偏移一位两位的查找有意义,不然一访一个越界。

所以数组的本质是把指针加减算式换成了直观好看的套皮算式,毕竟一般人谁想得到要把括号当运算符看(・∀・)但本质就是算式

数组arr[x]在定义时就是快速创建*arr~*(arr+x),数组arr[x][y]定义时是先创建*arr~*(arr+x),再以这x个为最小单位创建y个
访问时就是先计算一维数组的指针arr[x](类型是int* [y]),再计算arr[x]+y(以[y]长度为单位跳跃查找)。

以此类推,n维数组在定义时是从一维开始一层一层往外计算,本质上就是从*arr然后把*arr到*(arr+x*y*z*…)之间的所有地址都初始化,访问时从n-1维开始访问,一层减一维,一层一层跳,到最后锁定确定的某一个元素
从内存上看就是线性的连续的一条而已,但确实可以模拟出多维的感觉,真的很妙(σ゚д゚)σ

感觉是很有趣的知识,后面学指针也许会学?总之提前加深印象了,感激不尽!祝好肥哥头发越长越茂密,越码越年轻口牙(`ヮ´ )