如果在字符数组名前加上取地址符&,会发生什么?

luyan1235 2013-09-08 10:50:41
我测试了一下加和不加结果一样啊


程序1:#include<stdio.h>
int main(void)
{
char str[80];
scanf("%s",&str);
printf("%s",str);
printf("%s","Hello");
return 0;
}
程序2:#include<stdio.h>
int main(void)
{
char str[80];
scanf("%s",str);
printf("%s",str);
printf("%s","Hello");
return 0;
}
求大牛详述 为什么网上说不能在字符数组名前加上取地址符&
...全文
2131 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
modyaj 2013-09-09
  • 打赏
  • 举报
回复
这只是碰巧 看4楼
独孤的根号3 2013-09-09
  • 打赏
  • 举报
回复
9楼的回复比较靠谱,这两种取地址之后,如果进行运算,移动的字节确实不一样
luyan1235 2013-09-09
  • 打赏
  • 举报
回复
看了4楼的回复 除了指针类型不同外 是不是 加&与不加&的运行结果是一样的??
TheMadMan 2013-09-09
  • 打赏
  • 举报
回复
建议楼主多看看指针与数组,而有个东东叫指针数组和数组指针,一个是指向数组头地址的指针,一个就是数组,但是是一群指针。
FengPrince 2013-09-09
  • 打赏
  • 举报
回复 3
明确告诉你,肯定不一样。 对数组int a[10]来讲,a和&a都表示地址,准确来讲它们不是地址,而是指针(地址基本上算是错误的说法)! 虽然,指针的内容即指向的地址相同,但指针类型不同: a是指向数组元素int的指针int*,指针操作的基本单位为4Bytes; 而&a是指向数组a[10]的指针int(*)[10],指针操作的基本单位为40Bytes。
赵4老师 2013-09-09
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
max_min_ 2013-09-08
  • 打赏
  • 举报
回复
看看指针数组吧! 这些都是c的基础东西!东西千万不要学空了!这样后面就不知所云了
xiaomi163 2013-09-08
  • 打赏
  • 举报
回复
建议买本《C语言深度剖析》啃啃
yulinlang 2013-09-08
  • 打赏
  • 举报
回复
因为str的类型是char * 而&str的类型是char (*)[80]
小白也疯狂 2013-09-08
  • 打赏
  • 举报
回复
数组名的值是一段连续内存的起始地址,取数组名的地址,还不是其本身?
海的神话 2013-09-08
  • 打赏
  • 举报
回复 1
数组名本来就是指一个地址,数组名有的时候是跟指针功能一样的你晓得的吧。一个地址再取地址,你说,还符号原来的本意不
taodm 2013-09-08
  • 打赏
  • 举报
回复
会发生你需要去买本《C和指针》来啃的悲剧

70,014

社区成员

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

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