C语言字符串指针问题

为什么可以char*p;p="hello";指针不是地址吗?地址怎么会是字符啊?哎呀,我好像没问明白,我的意思是地址不是数字吗?难道不是地址上存的内容才是字符?为什么这个... 为什么可以
char *p;
p="hello";
指针不是地址吗?地址怎么会是字符啊?
哎呀,我好像没问明白,
我的意思是 地址不是数字吗?难道不是地址上存的内容才是字符?为什么这个地址可以是字符?
展开
 我来答
doujiangwutang
推荐于2018-04-08 · TA获得超过969个赞
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:119万
展开全部
让p指向常量字符串hello的首地址,即p中存hello的第一个字符在内存中的地址,p="hello";
就等于把字符串首地址赋给了指针变量p
希望能够帮到您
补充您的提问如下:
这虽是一个赋值表达式,但不是把内容hello赋给指针p,p的内容仍是地址,是字符串hello的首地址,实际上此表达式就是把字符串首地址赋给p,让p指向常量字符串hello的内存单元,就是这个意思,有点绕,希望您明白了。
贫寒乌鸦
2011-03-24
知道答主
回答量:28
采纳率:0%
帮助的人:10万
展开全部
这里是定义了一个字符指针p,再将字符串常量"hello"的第一个元素的地址(即存放字符串的字符数组的首元素地址)赋值给它。如果误认为是将这个字符串赋值给他是不对的,以上的语句等同于:
char*p="hello";
这里是初始化。
可以看到p被定义为一个指针变量,指向字符型数据,输出时,要用:
printf("%s\n",p);
在输出时,系统先输出它指向的一个字符数据,然后自动使p加1,使之指向下一个字符,然后在输出一个字符···如此直到遇到字符串结束标志'\0'为止。
说明:通过字符数组名或字符串指针变量可以输出一个字符串,而对一个数值型数组,是不能企图用数组名输出他的全部元素的。
具体的可以参考谭浩强编写的《C语言程序设计》一书,上面有详细的介绍。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zero_fn
2011-03-24 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:452万
展开全部
两种都是说明字符串变量的的办法

char *p 表示p是一个指向某个字符串首地址的指针,但此时该字符串还不存在,也没分配空间
p=“hello” 可以理解为p是一个字符串变量,但该字符串已经分配空间
还可以这样定义:
p[5+1]={'h','e','l','l','o','\0'};

两者的一些区别:
对于char *p 来说
*p = “HELLO”; 合法
strcpy(p,"HELLO"); 非法
gets(p); 非法
对于p[5+1]={'h','e','l','l','o','\0'};或(p="hello";) 来说
p=“HELLO” 非法
strcpy(p,"HELLO"); 合法
gets(p); 合法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunnyheyun
2011-03-24
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
首先,指针不是地址。p是指针变量,这个变量是内存中的一块空间,可以用来存储数据,但是要求这个数据——必须是字符串“类型”的地址,才可以存放。“hello”,在C语言中不是字符,而是字符串,存储字符串“类型”可用char×。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-24
展开全部
你这样等于把hello当地址付给了P 所以P就是指向字符串的第一个地址'h', c语言里面可以把字符串当地址给指针 而且字符串地址就是本身它自己 这也就是 *p输出的是'h' 了
但p=‘h’就另当别论了 *p就可能是其他了 没定义字符地址就是它自己 在C++中可能根本不允许 char *p='h';
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(11)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式