对 char (&p)[9] = array;有些不太明白。请教

wayne92 2005-11-24 01:57:15
#include<stdio.h>
main()
{
char array[9] = {48,49,50,51,52,53,54,56,57};
char (&p)[9] = array;
char *q = array;
printf("%d\n%d\n%d\n",sizeof(p),sizeof(array),sizeof(q));

return 0;
}
对 char (&p)[9] = array;有些不太明白。
我的理解是array是一个指针(指向数组array[9]的第一个元素)。把array赋值给p,然后&p,这样声明char (&p)[9]就相当于创建了一个数组p[9],而且数组p和数组array在内存中占的地址一样。等于p是array的一个别名。
在vc++6.0下调试,结果如下。不明白为什么array和&array一样,&p和&array不一样。
array 0x0012ff74 "012345689烫汤."
&array 0x0012ff74 "012345689烫汤."
p 0x0012ff74 "012345689烫汤."
&p 0x0012ff74
我的理解肯定有很多不对的地方,请教大家!
...全文
379 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
N_thread 2005-11-26
  • 打赏
  • 举报
回复
数组名就是地址
&p是地址,就可以当数组名用,从连续的空间中以sizeof(char)读出9个
aimt 2005-11-26
  • 打赏
  • 举报
回复
引用,也就是原来数组的别名,故sizeof(p)和sizeof(array)结果是一样的.而q为指针,故sizeof(q)为4
zkingsun 2005-11-25
  • 打赏
  • 举报
回复
mark,学习一下。。
ilovedudu 2005-11-24
  • 打赏
  • 举报
回复
向顾问团学习
lzp229 2005-11-24
  • 打赏
  • 举报
回复
不好意思。理解错了。c++就看过一点。
寻开心 2005-11-24
  • 打赏
  • 举报
回复
不能按照指针来理解,而是按照引用来理解

引用和取地址虽然都是一个符号,但是用途是不一样的
在定义变量的时候,&表示的是引用
在使用变量的时候,&才表示是取地址

这个是c++的特点
bsnhk 2005-11-24
  • 打赏
  • 举报
回复
char (&p)[9] = array;写错了吧?应该是char (*p)[9] = &array;吧!
lzp229 2005-11-24
  • 打赏
  • 举报
回复
我是按照指针那么理解的。
char (*p)[9] 不就是定义p,类型为char (* )[9] 么
寻开心 2005-11-24
  • 打赏
  • 举报
回复
p就是array的另外一个名字, p也是 char[9]类型
lzp229 2005-11-24
  • 打赏
  • 举报
回复
char (&p)[9] = array;
我理解这句是定义一个p,类型是char (& )[9]

这样理解对不?
寻开心 2005-11-24
  • 打赏
  • 举报
回复
#include "iostream.h"

void main()
{
char c = '3';
char &cc = c; // cc = 3
cout << cc <<"\r\n";

int i = 55;
char &ci = (char&) i; // ci = 55 = '7'
cout << ci <<"\r\n";
i = 0x100
ci = 6; // i = 0x106 = 262 也就是说i的低位是6
cout << i <<"\r\n";
}
寻开心 2005-11-24
  • 打赏
  • 举报
回复
引用是c++的特性,不是c的特性
在VC当中把文件另存成cpp扩展名,再编译
lzp229 2005-11-24
  • 打赏
  • 举报
回复
我在vc里编不过去。c里面&是不是不行。
寻开心 2005-11-24
  • 打赏
  • 举报
回复
就是引用的一个例子啊

char (&p)[9] = array;

实际上是定义了一个char类型的数组,数组的名字是p,它包含是9个元素
这个数组在空间上和array是重叠的
实际上p就是array的别名

这个就是引用的一个例子而已,无非是应用到了数组上,让你看着迷惑一点而已

类似的:
char c;
char &cc = c;
你对cc的操作,同时改变了c的内容; 对c操作同时也改变了cc的内容
这个就是引用的概念

类似的还有
int b=3;
char& cc = (char&)b; // 这里对b做了强制转换
其结果相当于做对b和cc做了union的定义,cc对应b的第一个字节
lzp229 2005-11-24
  • 打赏
  • 举报
回复
不明白为什么array和&array一样,&p和&array不一样。



对array这个数组名字取地址在C标准里面是未定义的,编译器认为array和&array一样。
lzp229 2005-11-24
  • 打赏
  • 举报
回复
声明char (&p)[9]也不是定义数组,实在定义一个p,类型是char (& )[9]
lzp229 2005-11-24
  • 打赏
  • 举报
回复
array是数组首地址,是具有数组类型的地址。

69,371

社区成员

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

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