C语言 指针问题
char temp = {1, 2, 3, 4, 5};char (*p2) = temp;
请问现在p2代表什么?
*p2代表temp地址?
temp和&temp有什么区别?(为什么代表的地址一样,但是sizeof不一样?) 本帖最后由 ba21 于 2017-6-26 20:02 编辑
(*p2) 是一个指向数组指针。
*p1 代表temp的值相当于*(p1+0);*(p1 +1) 代表 temp 的值;*(p1+i) 代表 temp 的值。
temp 是数组首元素的地址; &temp是数组的地址;就地址而言temp 等于 &temp 的。
ba21 发表于 2017-6-26 11:44
p2 是一个数组指针。
*p1 代表temp的值相当于*(p1+0);*(p1 +1) 代表 temp 的值;*(p1+i) 代表 temp ...
p2不是数组指针 你看错了 temp是一个数组 类型是char
&temp是一个数组指针 char(*)
类型不同 值的比较没有意义
求道于盲 发表于 2017-6-26 16:58
p2不是数组指针 你看错了
好吧!(*p) 是数组指针。如果这样打全还不是,那就请指教了。 求道于盲 发表于 2017-6-26 16:58
p2不是数组指针 你看错了
就地址而言temp = &temp ;
这又不是,请指教了。 ba21 发表于 2017-6-26 18:29
好吧!(*p) 是数组指针。如果这样打全还不是,那就请指教了。
一样不是
不是加括号就变成数组指针
这是一个char* 而已 求道于盲 发表于 2017-6-26 19:31
一样不是
不是加括号就变成数组指针
这是一个char* 而已
没错没错{:5_106:} 本帖最后由 回忆一遥远 于 2017-7-8 22:43 编辑
char temp = {1, 2, 3, 4, 5};
char (*p2) = temp;
请问现在p2代表什么?
p2 依然是个指针
*p2代表temp地址?
*p2 不是 temp 的地址, p2才是
temp 和 &temp 有什么区别?(为什么代表的地址一样,但是sizeof不一样?)
temp 和 &temp 的值(地址)是相同的,他们都是代表 temp 的(首)地址 。
temp是 temp 数组实体生成时转化的一个常量指针(指向 temp 数组这个实体),所以sizeof(temp)为5字节。
&temp是 temp 本身的地址,sizeof(&temp)32 位占4个字节, 64位占8个字节。
答案修改过了
回忆一遥远 发表于 2017-7-8 19:45
char temp = {1, 2, 3, 4, 5};
char (*p2) = temp;
错误很多
p2是一个char*
*p2不是指针而是 char
temp不是一个常量指针
而是一个数组 所以
sizeof temp 得到的是数组的大小
本帖最后由 回忆一遥远 于 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,是因为[]里的数值也作为常量编译了,所以有数据,在别的函数中并没有保存这种数据。
回忆一遥远 发表于 2017-7-8 20:13
int *p2;
char *p2;
double *p2;
说到底 你不清楚 指针是什么 数组是什么
指针是一种数据类型
int* 类型
double* 类型
数组是另外一种类型
int 类型
int 类型
ps 这是两种不同的类型
double类型
数组不是指针
数组是多个同种类型的变量的集合
去掉定语 提取主干
数组是一个集合
指针表示的是 对象在内存中的位置 对象的大小 对象的解读模式 等信息
两者区别很大
之所以 数组和指针看起来很接近是C里面一个规则
数组在多数情况下会转换为指向数组第一个元素的指针
这是一个隐式类型转换
你们不了解C的类型系统
没搞懂数组是类型
没搞懂 指针是多种不同的类型
还把指针和地址混为一谈
漏洞太多了 求道于盲 发表于 2017-7-8 21:26
说到底 你不清楚 指针是什么 数组是什么
指针是一种数据类型
int* 类型
http://blog.csdn.net/boatalways/article/details/17137307 回忆一遥远 发表于 2017-7-8 21:37
http://blog.csdn.net/boatalways/article/details/17137307
通篇胡说八道 回忆一遥远 发表于 2017-7-8 21:37
http://blog.csdn.net/boatalways/article/details/17137307
一个常识
指针大小都一样 对吧
sizeof(int*) == sizeof(double*)
而对于数组来说 没这回事对吧
这说明数组不是指针
回忆一遥远 发表于 2017-7-8 21:37
http://blog.csdn.net/boatalways/article/details/17137307
你能说出
sizeof 数组 得到数组的大小
你却无法解释 为什么
数组是指针 但是sizeof 数组 得到的不是指针的大小
两者是矛盾的 回忆一遥远 发表于 2017-7-8 21:37
http://blog.csdn.net/boatalways/article/details/17137307
逻辑上无法自洽 求道于盲 发表于 2017-7-8 21:26
说到底 你不清楚 指针是什么 数组是什么
指针是一种数据类型
int* 类型
你能提供一下写了
【数组是另外一种类型
int 类型
int 类型】
的书看看吗,我看了好几本都没有说的非常详细的 本帖最后由 回忆一遥远 于 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 本帖最后由 回忆一遥远 于 2017-7-8 21:59 编辑
求道于盲 发表于 2017-7-8 21:44
逻辑上无法自洽
好吧 不得不承认看了你的回复对数组有更深的理解了{:10_254:}
可惜等级不够,不能加好友.....
页:
[1]
2