用了很多年c了,还有基本概念搞不清楚,大家帮助

snowx 2004-07-15 02:59:25
学的不扎实,让大家费心了,我把几个疑问提出来:

1.
char str[] = "work hard";
str[]是否表示一个数组,str应当就是这个数组的首地址,如此的赋值代表什么呢?
为什么sizeof(str)能够得到10?而用指针,char *p = "work hard"; sizeof(p)应当是4(视机器而定)。
这里不指定数组str的维数,编译器是如何理解的呢?

2.
这次是这样
void Function(char d[100])
{
sizeof(d) = 4
为什么这里又是4了?
}

数组和指针,很多场合可以混合使用,为什么有时候作为函数参数传递,编译却通不过呢?


以前遇到问题,不喜欢深究,所以养成了不求甚解的一些不良习惯。
现在发现不深究一些东西,无法弄清楚本质的含义和用法。
...全文
733 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowx 2004-07-19
  • 打赏
  • 举报
回复
多谢各位帮助
因为人多分少,这次给分不均,请原谅

回复人: bianliuwei(C++一辈子) ( ) 信誉:100
为什么不上机试一下呢,不全清楚了吗?我倒,楼上还有喜欢谭书的,他的书尽是无聊之内容,带人入门可以,想靠书本学精语言的话还是国外经典教材及实践!

问题就是上机出现的,但无法理解,所以才在这里提出来的
你所提出来的国外景点教材及实践,我会去留意的
多谢
Venda 2004-07-19
  • 打赏
  • 举报
回复
char * p ;
cin>> p ;
--------

当然不行了,
你只是定义了一个执行字符的指针p,
还没给该指针分配空间。
flytrq 2004-07-19
  • 打赏
  • 举报
回复
看看高质量c++/c编程指南吧 那上边说得很详尽 作者是林锐博士
bianliuwei 2004-07-19
  • 打赏
  • 举报
回复
为什么不上机试一下呢,不全清楚了吗?我倒,楼上还有喜欢谭书的,他的书尽是无聊之内容,带人入门可以,想靠书本学精语言的话还是国外经典教材及实践!
nwyf2000 2004-07-19
  • 打赏
  • 举报
回复

如果char *P="asdfasdf"
那么sizeof(P)会等于什么呢?是不是9呢?还是应该等于这个字符串的首地址?还是应该等于4?
wfu 2004-07-16
  • 打赏
  • 举报
回复
同意ghxmagic(ghxmagic),又学了一招

ghxmagic 2004-07-16
  • 打赏
  • 举报
回复
<<高質量C++編程指南>> [林锐]
xjp6688 2004-07-16
  • 打赏
  • 举报
回复
up
yndfcd 2004-07-16
  • 打赏
  • 举报
回复
数组名和指针很多情况下可以通用.最大的区别是数组名不能作左值,而指针可以.
iceblue7 2004-07-16
  • 打赏
  • 举报
回复
我想,这些问题真的是我这样的新手应该注意的.
wasoxi 2004-07-16
  • 打赏
  • 举报
回复
楼主废人都好几个背星了
把分 分给我们几个就行了
^_^
expert2000 2004-07-16
  • 打赏
  • 举报
回复
up
dinyingying 2004-07-16
  • 打赏
  • 举报
回复
第一次来这里,真好,高手如云,嘿嘿,以后有问题就靠大家了!
myhex 2004-07-16
  • 打赏
  • 举报
回复
可是这个长度是9 的9,编译器又是如何知道的呢?难道它内部保存了这个值?
chen18s 2004-07-16
  • 打赏
  • 举报
回复
那个char *p = "aosdasdf" ;
的问题,我也问过高人一次。
到现在还是有点模糊,我说一遍,顺便长长自己的记性

char *p是定义了一个指向char型变量的指针。如果我们使用以下程序段:
--------
char * p ;
cin>> p ;
--------
是不行的。因为只给了一个地址,但不给他长度,编译器是不晓得你要占多长内存的。

而 char *p = "asdfasdf" ; 很明显,"asdfasdf"的长度是9。然后把"asdfasdf"中的首地址给p.
既然知道了指针地址,又知道了长度,为虾米不行呢????
bibingpang 2004-07-16
  • 打赏
  • 举报
回复
to 楼上:
数组作为参数传递到函数里时,实际上被传递的是指向数组第一个元素的指针,而指针的大小一般都是4个字节

JM0624 2004-07-16
  • 打赏
  • 举报
回复
同意camel20(111222)的!
wfu 2004-07-15
  • 打赏
  • 举报
回复
sdp(雨尘):
char* p = "work hard";
当然可以
dragoonj 2004-07-15
  • 打赏
  • 举报
回复
char* p = "work hard";时,
p只是一个指针,它指向常量"work hard"的首地址,可以作为左值,如p = NULL, p = q ...
char p[] = "work hard";时,p是一个数组,不能作为左值
挺拔的劲松 2004-07-15
  • 打赏
  • 举报
回复
char* p = "work hard";
这样的语句都行???????
加载更多回复(17)

69,373

社区成员

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

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