C语言字符串指针问题
为什么可以char*p;p="hello";指针不是地址吗?地址怎么会是字符啊?哎呀,我好像没问明白,我的意思是地址不是数字吗?难道不是地址上存的内容才是字符?为什么这个...
为什么可以
char *p;
p="hello";
指针不是地址吗?地址怎么会是字符啊?
哎呀,我好像没问明白,
我的意思是 地址不是数字吗?难道不是地址上存的内容才是字符?为什么这个地址可以是字符? 展开
char *p;
p="hello";
指针不是地址吗?地址怎么会是字符啊?
哎呀,我好像没问明白,
我的意思是 地址不是数字吗?难道不是地址上存的内容才是字符?为什么这个地址可以是字符? 展开
13个回答
展开全部
这里是定义了一个字符指针p,再将字符串常量"hello"的第一个元素的地址(即存放字符串的字符数组的首元素地址)赋值给它。如果误认为是将这个字符串赋值给他是不对的,以上的语句等同于:
char*p="hello";
这里是初始化。
可以看到p被定义为一个指针变量,指向字符型数据,输出时,要用:
printf("%s\n",p);
在输出时,系统先输出它指向的一个字符数据,然后自动使p加1,使之指向下一个字符,然后在输出一个字符···如此直到遇到字符串结束标志'\0'为止。
说明:通过字符数组名或字符串指针变量可以输出一个字符串,而对一个数值型数组,是不能企图用数组名输出他的全部元素的。
具体的可以参考谭浩强编写的《C语言程序设计》一书,上面有详细的介绍。
char*p="hello";
这里是初始化。
可以看到p被定义为一个指针变量,指向字符型数据,输出时,要用:
printf("%s\n",p);
在输出时,系统先输出它指向的一个字符数据,然后自动使p加1,使之指向下一个字符,然后在输出一个字符···如此直到遇到字符串结束标志'\0'为止。
说明:通过字符数组名或字符串指针变量可以输出一个字符串,而对一个数值型数组,是不能企图用数组名输出他的全部元素的。
具体的可以参考谭浩强编写的《C语言程序设计》一书,上面有详细的介绍。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两种都是说明字符串变量的的办法
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); 合法
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); 合法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,指针不是地址。p是指针变量,这个变量是内存中的一块空间,可以用来存储数据,但是要求这个数据——必须是字符串“类型”的地址,才可以存放。“hello”,在C语言中不是字符,而是字符串,存储字符串“类型”可用char×。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-03-24
展开全部
你这样等于把hello当地址付给了P 所以P就是指向字符串的第一个地址'h', c语言里面可以把字符串当地址给指针 而且字符串地址就是本身它自己 这也就是 *p输出的是'h' 了
但p=‘h’就另当别论了 *p就可能是其他了 没定义字符地址就是它自己 在C++中可能根本不允许 char *p='h';
但p=‘h’就另当别论了 *p就可能是其他了 没定义字符地址就是它自己 在C++中可能根本不允许 char *p='h';
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询