问一个很简单的关于指针的问题

fishkid 2008-09-12 04:36:15
如果是int x = 3; int * y的话。如果赋值应该是 y = &x,也就是y其实本身是个地址。

但如果是 char *x; 再赋值的话,则是 x = "abc" ,难道这个时候x也是地址吗?这个怎么讲?你再*x的话那代表什么呢?
...全文
147 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
UncleQiong 2008-09-14
  • 打赏
  • 举报
回复
相信7楼的已经说得很详细了哦。。。
mocherson 2008-09-14
  • 打赏
  • 举报
回复
char *x;
x="abc";
说明字符指针x指向的是字符串“abc”的首地址,
你取x的内容的话(即*x)那自然是取出它所指向的字符‘a’了。
7楼的代码就说明了这个问题。
mikelu2008 2008-09-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mifeixq 的回复:]
这要谈到指针和数组的异同性了

看char *str = "123";
也就是
char *str;
str="123";
怎么可能把字符串给一个地址呢? 看测试代码
#include <stdio.h>

int main()
{
char *str ;
str = "123";
printf("%s\n", str);
return 0;
}
事实上,结果真就输出123了…… 看来这里有说法
"123" --->字符串常量,存放在内存常量区(.text区)
那么str究竟是什么的地址呢?
测试代码
#include <stdio.h…
[/Quote]
向7楼好好学习……
机智的呆呆 2008-09-13
  • 打赏
  • 举报
回复
*x代表*(x+0)即x[0]
vbcpascal 2008-09-13
  • 打赏
  • 举报
回复
回二楼,这"abc"是个字符串字面值,即C风格字符串,也是个const char的数组,
x="abc"使x指向这数组的第一个元素('a'),所以cout<<*x输出的是a
雪鹰翔天 2008-09-12
  • 打赏
  • 举报
回复
程序只是把字符串当成了字符的数组而已,x指针指向此数组的首地址,*x也是数组的第一个元素。
mifeixq 2008-09-12
  • 打赏
  • 举报
回复
这要谈到指针和数组的异同性了

看char *str = "123";
也就是
char *str;
str="123";
怎么可能把字符串给一个地址呢? 看测试代码
#include <stdio.h>

int main()
{
char *str ;
str = "123";
printf("%s\n", str);
return 0;
}
事实上,结果真就输出123了…… 看来这里有说法
"123" --->字符串常量,存放在内存常量区(.text区)
那么str究竟是什么的地址呢?
测试代码
#include <stdio.h>

int main()
{
char *str ;
str = "123";
printf("%p\n", str);
return 0;
}
输出:0x8048470
继续测试

#include <stdio.h>

int main()
{
char *str ;
str = "123";
printf("%c\n", *str);
return 0;
}
输出:1 ,原来*str 是1,那么猜测 str 就是第一个字符的地址?看测试代码
#include <stdio.h>

int main()
{
char *str ;
str = "123";
printf("%p\n", &(*str));
return 0;
}
输出:0x8048470 , 真的是猜测的结果
----------------------------------------
结论:str 内存放字符串首地址……
Lucky1118 2008-09-12
  • 打赏
  • 举报
回复
* 有两种意思

char * x ; 这时候的*是指针定义,说明x是一个char指针

*x = a; 这时候 * 是间接运算符,是把x指向的地址放入a


liaoweixiaoyu 2008-09-12
  • 打赏
  • 举报
回复
指针指向字符串首地址,
talent123 2008-09-12
  • 打赏
  • 举报
回复
我的理解是 x指向"abc"这个字符串的首地址,*x对地址解引用得到'a'
zhshk 2008-09-12
  • 打赏
  • 举报
回复
*x 植为a;
x 的指向静态数据区地址。
其实char *x;x = "abc";
不准确,但编译器不会出错。准确的定义是:
const char *x="abc";
帅得不敢出门 2008-09-12
  • 打赏
  • 举报
回复
x 为const char* 的首地址 此例为"abc"
rivulettornado 2008-09-12
  • 打赏
  • 举报
回复
这里的x很特殊,比如说使用cout<<x;输出的就是这一个字符串。
binsir543 2008-09-12
  • 打赏
  • 举报
回复
代表a
devil_zuiai 2008-09-12
  • 打赏
  • 举报
回复
带*号的是指针,指针就是用于指向一个内存地址。

指针本身也有大小为4个字节。
double*,int*,char* 都是4个字节。
Justmeh 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mifeixq 的回复:]
这要谈到指针和数组的异同性了

看char *str = "123";
也就是
char *str;
str="123";
怎么可能把字符串给一个地址呢? 看测试代码
#include <stdio.h>

int main()
{
char *str ;
str = "123";
printf("%s\n", str);
return 0;
}
事实上,结果真就输出123了…… 看来这里有说法
"123" --->字符串常量,存放在内存常量区(.text区)
那么str究竟是什么的地址呢?
测试代码
#include <stdio.h…
[/Quote]

很有说服信。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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