鱼C论坛

 找回密码
 立即注册
查看: 3951|回复: 29

C语言 指针问题

[复制链接]
发表于 2017-6-26 11:10:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
        char temp[5] = {1, 2, 3, 4, 5};
        char (*p2) = temp;

请问现在p2代表什么?
*p2代表temp[0[]地址?
temp和&temp有什么区别?(为什么代表的地址一样,但是sizeof不一样?)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-26 11:44:50 | 显示全部楼层
本帖最后由 ba21 于 2017-6-26 20:02 编辑

(*p2) 是一个指向数组指针。
*p1 代表temp[0]的值相当于*(p1+0);*(p1 +1) 代表 temp[1] 的值;*(p1+i) 代表 temp 的值。
temp 是数组首元素的地址; &temp是数组的地址;  就地址而言temp 等于 &temp 的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 16:58:42 | 显示全部楼层
ba21 发表于 2017-6-26 11:44
p2 是一个数组指针。
*p1 代表temp[0]的值相当于*(p1+0);*(p1 +1) 代表 temp[1] 的值;*(p1+i) 代表 temp ...

p2不是数组指针 你看错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 16:59:48 | 显示全部楼层
temp是一个数组 类型是char[5]
&temp是一个数组指针 char(*)[5]


类型不同 值的比较没有意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 18:29:07 | 显示全部楼层
求道于盲 发表于 2017-6-26 16:58
p2不是数组指针 你看错了

好吧!(*p) 是数组指针。如果这样打全还不是,那就请指教了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2017-6-26 18:30:50 | 显示全部楼层
求道于盲 发表于 2017-6-26 16:58
p2不是数组指针 你看错了

就地址而言temp = &temp ;
这又不是,请指教了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 19:31:02 | 显示全部楼层
ba21 发表于 2017-6-26 18:29
好吧!(*p) 是数组指针。如果这样打全还不是,那就请指教了。

一样不是
不是加括号就变成数组指针
这是一个char* 而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-26 20:00:57 | 显示全部楼层
求道于盲 发表于 2017-6-26 19:31
一样不是
不是加括号就变成数组指针
这是一个char* 而已

没错没错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 19:45:30 | 显示全部楼层
本帖最后由 回忆一遥远 于 2017-7-8 22:43 编辑

char temp[5] = {1, 2, 3, 4, 5};
        char (*p2) = temp;

请问现在p2代表什么?
p2 依然是个指针

*p2代表temp[0[]地址?
*p2 不是 temp[0] 的地址, p2才是

temp 和 &temp 有什么区别?(为什么代表的地址一样,但是sizeof不一样?)
temp 和 &temp 的值(地址)是相同的,他们都是代表 temp 的(首)地址 。
temp  是 temp 数组实体生成时转化的一个常量指针(指向 temp 数组这个实体),所以sizeof(temp)为5字节。
&temp是 temp 本身的地址,sizeof(&temp)32 位占4个字节, 64位占8个字节。


答案修改过了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2017-7-8 19:51:44 | 显示全部楼层
回忆一遥远 发表于 2017-7-8 19:45
char temp[5] = {1, 2, 3, 4, 5};
        char (*p2) = temp;

错误很多
p2是一个char*
*p2不是指针而是 char

temp不是一个常量指针
而是一个数组 所以
sizeof temp 得到的是数组的大小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 20:13:41 | 显示全部楼层
本帖最后由 回忆一遥远 于 2017-7-8 20:38 编辑
求道于盲 发表于 2017-7-8 19:51
错误很多
p2是一个char*
*p2不是指针而是 char


int *p2;
char *p2;
double *p2;
...
p2 都是个存地址的容器(指针), 前面的 int, char 之类的只是告诉编译器用什么类型处理存在 p2 里的地址中的空间中的数据,并不会影响 p2 本身的属性。
*p2 指的是以声明 p2 时给定的处理类型来处理 p2 空间中的数据。

temp 确实是个常量指针啊,数组名应该都是常量指针。后面的 [] 里的数值是编译器处理的,分配的,如果调用一个函数将 temp 传到调用函数中 sizeof(temp) ,结果是1,这就说明数组确实是指针和编译器处理分配的空间组成的啊。之所以在一个函数中 sizeof(temp) 是5,是因为[]里的数值也作为常量编译了,所以有数据,在别的函数中并没有保存这种数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2017-7-8 21:26:13 | 显示全部楼层
回忆一遥远 发表于 2017-7-8 20:13
int *p2;
char *p2;
double *p2;

说到底 你不清楚 指针是什么 数组是什么
指针是一种数据类型
int* 类型
double* 类型

数组是另外一种类型
int[2] 类型
int[3] 类型
ps 这是两种不同的类型
double[10]类型

数组不是指针
数组是多个同种类型的变量的集合
去掉定语 提取主干
数组是一个集合

指针表示的是 对象在内存中的位置 对象的大小 对象的解读模式 等信息

两者区别很大

之所以 数组和指针看起来很接近是C里面一个规则
数组在多数情况下会转换为指向数组第一个元素的指针
这是一个隐式类型转换

你们不了解C的类型系统
没搞懂数组是类型
没搞懂 指针是多种不同的类型
还把指针和地址混为一谈
漏洞太多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 21:37:24 | 显示全部楼层
求道于盲 发表于 2017-7-8 21:26
说到底 你不清楚 指针是什么 数组是什么
指针是一种数据类型
int* 类型

http://blog.csdn.net/boatalways/article/details/17137307
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2017-7-8 21:40:15 | 显示全部楼层
回忆一遥远 发表于 2017-7-8 21:37
http://blog.csdn.net/boatalways/article/details/17137307

通篇胡说八道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 21:41:23 | 显示全部楼层
回忆一遥远 发表于 2017-7-8 21:37
http://blog.csdn.net/boatalways/article/details/17137307

一个常识
指针大小都一样 对吧
sizeof(int*) == sizeof(double*)

而对于数组来说 没这回事对吧
这说明数组不是指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 21:42:26 | 显示全部楼层
回忆一遥远 发表于 2017-7-8 21:37
http://blog.csdn.net/boatalways/article/details/17137307

你能说出
sizeof 数组 得到数组的大小
你却无法解释 为什么
数组是指针 但是sizeof 数组 得到的不是指针的大小

两者是矛盾的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 21:44:47 | 显示全部楼层
回忆一遥远 发表于 2017-7-8 21:37
http://blog.csdn.net/boatalways/article/details/17137307

逻辑上无法自洽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 21:51:05 | 显示全部楼层
求道于盲 发表于 2017-7-8 21:26
说到底 你不清楚 指针是什么 数组是什么
指针是一种数据类型
int* 类型

你能提供一下写了
【数组是另外一种类型
int[2] 类型
int[3] 类型】
的书看看吗,我看了好几本都没有说的非常详细的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 21:53:46 | 显示全部楼层
本帖最后由 回忆一遥远 于 2017-7-8 21:55 编辑
求道于盲 发表于 2017-7-8 21:42
你能说出
sizeof 数组 得到数组的大小
你却无法解释 为什么


你想说的是这个吗?
http://blog.csdn.net/u013176681/article/details/38948327
还有这个
http://blog.csdn.net/tianyue168/article/details/5781924
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 21:57:03 | 显示全部楼层
本帖最后由 回忆一遥远 于 2017-7-8 21:59 编辑


好吧 不得不承认看了你的回复对数组有更深的理解了

可惜等级不够,不能加好友.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 11:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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