搜索
bottom↓
回复: 50

吊丝整理C语言 数组指针 指针数组

  [复制链接]

出0入0汤圆

发表于 2016-3-29 14:53:42 | 显示全部楼层 |阅读模式
本帖最后由 WM_CH 于 2016-3-29 14:55 编辑

主要针对指针数组和数组指针。
大家看看对不对。
没有啥好办法把文档内容贴出来。先贴几个图片吧。


有兴趣的可以下载附件。













本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2016-3-29 14:58:16 | 显示全部楼层
是楼主自己整理的吗

出0入0汤圆

 楼主| 发表于 2016-3-29 14:59:21 | 显示全部楼层
河图洛书 发表于 2016-3-29 14:58
是楼主自己整理的吗

嗯,之前看视频,做的笔记,现在整理成电子档

出0入0汤圆

发表于 2016-3-29 15:10:44 | 显示全部楼层
WM_CH 发表于 2016-3-29 14:59
嗯,之前看视频,做的笔记,现在整理成电子档

赞一个,下下来好好学习下

出0入0汤圆

发表于 2016-3-29 15:39:36 | 显示全部楼层
不错,帮顶。

出0入0汤圆

发表于 2016-3-29 15:41:01 | 显示全部楼层

出0入0汤圆

发表于 2016-3-29 16:11:04 | 显示全部楼层
下载学习一下

出0入0汤圆

发表于 2016-3-29 18:53:11 | 显示全部楼层
学习一下   

出0入0汤圆

发表于 2016-3-29 19:25:06 | 显示全部楼层
顶一个~

出0入0汤圆

发表于 2016-3-29 19:25:13 | 显示全部楼层
又可以复习一下指针了。多谢分享。

出0入0汤圆

发表于 2016-3-29 19:27:41 | 显示全部楼层
不错的资料,学习了

出0入0汤圆

发表于 2016-3-29 20:41:24 | 显示全部楼层
不错,收藏学习。

出0入0汤圆

发表于 2016-3-29 22:15:47 | 显示全部楼层
不错的资料,多谢分享。

出0入0汤圆

发表于 2016-3-30 08:02:33 来自手机 | 显示全部楼层
很容易晕乎,指针数组,数组指针,指针函数,函数指针

出10入46汤圆

发表于 2016-4-1 09:43:29 | 显示全部楼层
本帖最后由 gonboy 于 2016-4-1 11:38 编辑

把指针不停的镶嵌,比较谁厉害,也只能变成老学究了。

出0入93汤圆

发表于 2016-4-1 11:56:52 | 显示全部楼层
WM_CH 发表于 2016-3-29 14:59
嗯,之前看视频,做的笔记,现在整理成电子档

LZ,不得不说,你的图片的第二行红字部分是错的,错得离谱!希望您能领会。

指针和数组完全不同,虽然在C语言内部看来处理差不多,但是!
数组是分配在栈上的,指针是分配在堆上的,能一样吗?只有数组名才会等效于指针。
典型的,sizeof(指针)和sizeof(数组)得到的大小截然不同。可以作为佐证。
就相当于,你的身份证代表了你这个人,但是你的身份证就是你自身吗?

出0入0汤圆

发表于 2016-4-1 12:10:53 | 显示全部楼层
a[][3][4]  这个是什么鬼  没见过这种形式

出0入0汤圆

发表于 2016-4-1 12:15:39 | 显示全部楼层
takashiki 发表于 2016-4-1 11:56
LZ,不得不说,你的图片的第二行红字部分是错的,错得离谱!希望您能领会。

指针和数组完全不同,虽然在 ...

数组其实是个数据类型  代表一个内存块  其实和结构体非常类似   不过当年为方便计  作为参数传递时数组名会转换成指针形式

我看到过有人构造一个实例,数组名理解成指针常量是错误的

出0入93汤圆

发表于 2016-4-1 12:31:45 | 显示全部楼层
myxiaonia 发表于 2016-4-1 12:10
a[][3][4]  这个是什么鬼  没见过这种形式

这个和a[]是一样的,只不过维度提升了。一般用于函数传参或结构体的不完全类型中。一般用到三维数组的情况极少极少,教科书除外。
C语言的数组本质上都是一维的,还是定长的,真正的多维数组只能靠指针来实现。

出0入0汤圆

发表于 2016-4-1 12:46:13 | 显示全部楼层
takashiki 发表于 2016-4-1 11:56
LZ,不得不说,你的图片的第二行红字部分是错的,错得离谱!希望您能领会。

指针和数组完全不同,虽然在 ...

怎么理解的"数组是分配在栈上的,指针是分配在堆上的"??sizeof(指针)在同一个平台都是固定值。“你的身份证代表了你这个人,但是你的身份证就是你自身吗?”这个例子也让我加深里这两者的区别

出0入93汤圆

发表于 2016-4-1 13:41:57 | 显示全部楼层
Xy201207 发表于 2016-4-1 12:46
怎么理解的"数组是分配在栈上的,指针是分配在堆上的"??sizeof(指针)在同一个平台都是固定值。“你的 ...

借用单片机的属于进行类比,或许更容易理解些

栈相当于直接寻址,堆相当于间接寻址。一般直接寻址的也能用间歇寻址折腾,因此数组也能被编译器当做指针访问。

出0入0汤圆

发表于 2016-4-1 13:53:31 | 显示全部楼层
takashiki 发表于 2016-4-1 12:31
这个和a[]是一样的,只不过维度提升了。一般用于函数传参或结构体的不完全类型中。一般用到三维数组的情 ...

主要是为看他对于a都没有一个定义,看最后a[0][0]是个int型我以为定义了一个a[3][4]的数组,所以就看不懂这是个什么操作

出0入0汤圆

发表于 2016-4-1 13:57:56 | 显示全部楼层
资料不错

出0入0汤圆

 楼主| 发表于 2016-4-1 16:17:33 | 显示全部楼层
takashiki 发表于 2016-4-1 13:41
借用单片机的属于进行类比,或许更容易理解些

栈相当于直接寻址,堆相当于间接寻址。一般直接寻址的也能 ...

嗯嗯,学到了。谢谢指教。
我也是新手,整理了这些,确实错误百出。大家就把对的理解了,错的引以为戒吧。

出0入0汤圆

发表于 2016-4-1 19:42:03 | 显示全部楼层
WM_CH 发表于 2016-4-1 16:17
嗯嗯,学到了。谢谢指教。
我也是新手,整理了这些,确实错误百出。大家就把对的理解了,错的引以为戒吧 ...

没理解“栈相当于直接寻址,堆相当于间接寻址。”

出0入0汤圆

发表于 2016-4-1 20:59:27 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2016-4-2 05:16:37 来自手机 | 显示全部楼层
纸上得来终觉浅,做个液晶菜单项目就明了了

出0入0汤圆

发表于 2016-4-2 06:58:37 | 显示全部楼层
指针就是C 较难以把握的特色之一,即使老手有时也会出错,何况新手肯定会折腾不断。
教科书只能学到初步概念(包括有些谈指针的书),而学不到真正如何使用的,最好的学习方法是去看一些实际项目和应用,如:仔细研读OS核心代码等。

出0入0汤圆

发表于 2016-4-2 18:34:00 | 显示全部楼层
不错,顶一个

出0入0汤圆

发表于 2016-4-2 18:51:03 | 显示全部楼层
很不错,攒

出0入0汤圆

发表于 2016-4-29 22:40:39 | 显示全部楼层
對於中階學習者來說是好資料, 值得推一把.

出0入0汤圆

发表于 2016-4-30 00:05:29 | 显示全部楼层
好奇心  进来看看,看见图片忍不住笑了,图片红色文字说“数组是一个指针常量”,我相信这句话在正规的书本中绝对找不到,还有ar[1]怎么会被转换成ar+1呢?不应该是*(ar+1)么?

出0入0汤圆

发表于 2017-6-1 18:42:49 | 显示全部楼层
都快忘的差不多了
下载下来
重新学习下
谢谢

出0入0汤圆

 楼主| 发表于 2017-6-1 23:41:23 | 显示全部楼层
taoxy_wx 发表于 2017-6-1 18:42
都快忘的差不多了
下载下来
重新学习下

推荐您注意看楼上各位大大的指点,
里面有很多错误之处,抱歉

出0入0汤圆

发表于 2017-7-4 17:13:00 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2017-7-10 14:30:33 | 显示全部楼层
takashiki 发表于 2016-4-1 13:41
借用单片机的属于进行类比,或许更容易理解些

栈相当于直接寻址,堆相当于间接寻址。一般直接寻址的也能 ...

兄台您好,下面这三句话,是我从您的回复中提取出来的。

1. 数组是分配在栈上的,指针是分配在堆上的。只有数组名才会等效于指针。典型的,sizeof(指针)和sizeof(数组)得到的大小截然不同。

2. 栈相当于直接寻址,堆相当于间接寻址。一般直接寻址的也能用间歇寻址折腾,因此数组也能被编译器当做指针访问。

3. C语言的数组本质上都是一维的,还是定长的,真正的多维数组只能靠指针来实现。

当年刚刚从事单片机工作,对您说的还领会不到是什么意思。
奈何工作两年之后,碰到这里还是不太清楚。还请指教第1.2条的出处在哪里,我回去翻下书。谢谢兄台。






出0入296汤圆

发表于 2017-7-10 21:17:44 | 显示全部楼层
WM_CH 发表于 2017-7-10 14:30
兄台您好,下面这三句话,是我从您的回复中提取出来的。

1. 数组是分配在栈上的,指针是分配在堆上的。 ...

忍不住要驳斥以下观点——误人子弟:

1. 数组是分配在栈上的,指针是分配在堆上的。只有数组名才会等效于指针。典型的,sizeof(指针)和sizeof(数组)得到的大小截然不同。
—— C 语言原生态支持两种分配方式,栈分配和静态分配。局部变量(不包括静态局部变量)在栈上分配;全局变量和静态变量
      (加static的变量)是静态分配。并不存在数组(只能)在栈上分配的说法。另外,指针变量(单独说指针容易误解,因为还是指针常量和
常量指针——也就是地址)也是变量,同样存在栈分配和静态分配。最后,堆并不是C语言原生态支持的,而是通过软件和库来模拟的。所以,
指针分配在堆上也是错误的。sizeof(指针)获得的是指针变量本身的大小,sizeof(数组)获得的是数组大小,这是语法规定的,并不因为楼主
说的原因导致的。

       误人子弟!

2. 栈相当于直接寻址,堆相当于间接寻址。一般直接寻址的也能用间歇寻址折腾,因此数组也能被编译器当做指针访问。
——栈只是一个数据结构,和寻址方式基本无关。同样,堆也是一个数据结构,与寻址方式无关。误人子弟。

3. C语言的数组本质上都是一维的,还是定长的,真正的多维数组只能靠指针来实现。
—— 这句话隐含了楼主的一个自己的理解:定长的多维数组不是“真正”的多维数组,只有可以动态修改大小的多维数组才叫多维数组——敢情
楼主从BASIC语言来的吧?误人子弟。
    C语言的多维数组本质上欢迎定长,因为C语言并不原生态支持堆,所以编译器生成的数据类型都必须在编译时刻大小确定,这是为什么
C语言多维数组大小要定长的原因。多维数组也不一定一定只能靠指针数组来实现。具体不再展开。

希望楼主不要传播自己错误的理解。谢谢。

出0入296汤圆

发表于 2017-7-10 21:21:21 | 显示全部楼层
chenxujiaoyang 发表于 2016-4-30 00:05
好奇心  进来看看,看见图片忍不住笑了,图片红色文字说“数组是一个指针常量”,我相信这句话在正规的书本 ...

数组本质上是一个指针常量这句话并没有错,只是不准确。
数组的确本质上是一个指针常量+数组的大小信息和类型信息。

出0入296汤圆

发表于 2017-7-10 21:24:34 | 显示全部楼层
关于指针的理解,可以参考我的这个帖子

https://www.amobbs.com/thread-5640740-1-1.html

出0入0汤圆

 楼主| 发表于 2017-7-11 10:38:03 | 显示全部楼层
Gorgon_Meducer 发表于 2017-7-10 21:17
忍不住要驳斥以下观点——误人子弟:

1. 数组是分配在栈上的,指针是分配在堆上的。只有数组名才会等效 ...

版主出手,此贴终于得到圆满解答!

小弟谨记大师教诲,阿弥陀佛

出0入0汤圆

发表于 2017-8-6 21:32:28 | 显示全部楼层
版主理解很深刻,学习了

出0入0汤圆

发表于 2017-8-6 22:10:01 | 显示全部楼层
有心人...

出0入8汤圆

发表于 2017-8-6 23:08:00 来自手机 | 显示全部楼层
试着去实现一个c语言编译器,就没有这些疑问了

出0入296汤圆

发表于 2017-8-14 16:44:29 | 显示全部楼层
canspider 发表于 2017-8-6 23:08
试着去实现一个c语言编译器,就没有这些疑问了

估计这个要求超出一般人的能力和可用时间。
而且逻辑其实也不太对,这就好比说“你去制造一辆汽车,就知道怎么开车(修车)了”。

出0入8汤圆

发表于 2017-8-27 22:21:36 | 显示全部楼层
Gorgon_Meducer 发表于 2017-8-14 16:44
估计这个要求超出一般人的能力和可用时间。
而且逻辑其实也不太对,这就好比说“你去制造一辆汽车,就知 ...

要求真不高,计算机专业课的小作业就是设计一个编译器

出0入296汤圆

发表于 2017-8-29 19:19:15 | 显示全部楼层
本帖最后由 Gorgon_Meducer 于 2017-8-29 19:20 编辑
canspider 发表于 2017-8-27 22:21
要求真不高,计算机专业课的小作业就是设计一个编译器


你看看这里有几个人是计算机专业的?顺便说下,我是软件工程专业的,我做过你说的这个练习。由于我长期叛逃信息控制类专业,我知道他们根本没有对应的课程设置。

出0入8汤圆

发表于 2017-9-21 21:41:10 | 显示全部楼层
Gorgon_Meducer 发表于 2017-8-29 19:19
你看看这里有几个人是计算机专业的?顺便说下,我是软件工程专业的,我做过你说的这个练习。由于我长期叛 ...

所以,有时候你努力想教会别人的一些东西,在另一群人眼里只不过是入门的基础

出0入296汤圆

发表于 2017-10-6 16:53:53 | 显示全部楼层
canspider 发表于 2017-9-21 21:41
所以,有时候你努力想教会别人的一些东西,在另一群人眼里只不过是入门的基础 ...

觉得是入门知识的人,不是你的受众啊。为啥要在乎呢?真正需要的人才是真正愿意接受你帮助的人。

出0入8汤圆

发表于 2017-10-9 12:35:09 | 显示全部楼层
Gorgon_Meducer 发表于 2017-10-6 16:53
觉得是入门知识的人,不是你的受众啊。为啥要在乎呢?真正需要的人才是真正愿意接受你帮助的人。 ...

我这样来理解的
不管是科班也好非科班也好,要想在码代码这条路上走下去
最后的目的都一致,只是路径不同
科班的先看到远处的山峰然后走过去
非科班的先看到脚下的路,不知不觉走上了山
而你现在做的就是让他们不要迷路,同时在给一根拐杖

出0入296汤圆

发表于 2017-10-9 17:13:36 | 显示全部楼层
canspider 发表于 2017-10-9 12:35
我这样来理解的
不管是科班也好非科班也好,要想在码代码这条路上走下去
最后的目的都一致,只是路径不同 ...

哈哈,要不要一起来?

出0入0汤圆

发表于 2017-10-16 20:07:37 | 显示全部楼层
Gorgon_Meducer 发表于 2017-10-6 16:53
觉得是入门知识的人,不是你的受众啊。为啥要在乎呢?真正需要的人才是真正愿意接受你帮助的人。 ...

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 06:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表