| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4377 人关注过本帖
标题:定义字符指针并初始化,指针变量所指向的字符串存在哪个地方呢?
只看楼主 加入收藏
good66
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-9-13
结帖率:0
收藏
 问题点数:0 回复次数:8 
定义字符指针并初始化,指针变量所指向的字符串存在哪个地方呢?
定义字符指针并初始化,指针变量所指向的字符串存在哪个地方呢?
char *p="the world",此时变量会在内存中占4个字节,可是“the workd”这个字符串存在哪里呢?
----------------------------------------------------
因为p是一个指针变量,它在内存中占4个字节,它指向的是字符串“the world”的首地址,
我不明白的是,这个字符串存在哪里呢?这个字符串的地址是什么呢?

我先用定义一个整型作为例子,问问二者的区别。
int a=10;
就是定义一个整型变量 a ,这个变量在内存中占用4个字节,而且存在的内容就是 10 本身。这个很好理解,但是定义字符指针就不同了。
内存中存的是指针。但是它所指向的内容存在哪里呢?

这个字符串如果也存在内存中, 那么它的地址是什么呢?
虽然初始化时,p指向这个字符串,但是p随时可以指向别的位置,那么“the world”这几个字符串就会成为孤点了。
搜索更多相关主题的帖子: 指针 变量 定义 字符 
2009-09-14 15:26
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
     char *p="the world";
     printf("p=%p\n",p);
     printf("sizeof(p)=%d\n",sizeof(p));
     printf("strlen(p)=%d\n",strlen(p));
     return 0;
}
2009-09-14 15:37
atom_09
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:92
专家分:141
注 册:2009-8-24
收藏
得分:0 
char *p="the world"  指针变量p指向的字符串即"the world" 它是一个字符串常量 是 不能被改变的。它放在专门存放常量的内存区域里面
你要查看 "the world"字符串存放的地址 你可以用printf("%d",p);就能进行查看了


而char c[]="the world" 这个字符串是可以利用数组对其进行更改的,因为他是按字符数组的形式存放在c中
也就是c[0]='t' c[1]='h' ....c[10]='\0'来存放的
我们可以利用数组来对字符串进行改变 比如
*(c+1)='m'
那么输出字符串的话 结果就是  tme world
2009-09-14 15:38
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
char *p="the world"  =   const char *p="the world" 这里做了cast

printf("%d",p) ,错误, 应该用%p
2009-09-14 15:45
good66
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-9-13
收藏
得分:0 
以下是引用Devil_W在2009-9-14 15:45的发言:

char *p="the world"  =   const char *p="the world" 这里做了cast
 
printf("%d",p) ,错误, 应该用%p
没有明白您的意义,请再指教。
2009-09-14 16:06
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用good66在2009-9-14 16:06的发言:

没有明白您的意义,请再指教。



printf("%p",p) ;
2009-09-14 16:09
atom_09
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:92
专家分:141
注 册:2009-8-24
收藏
得分:0 
以下是引用Devil_W在2009-9-14 15:45的发言:

char *p="the world"  =   const char *p="the world" 这里做了cast
 
printf("%d",p) ,错误, 应该用%p
他的意思和我说的是一样的
const char *p="the world" 就是说*p指向的值不能改变 即"the world"为字符串常量
2009-09-14 16:10
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
回复 5楼 good66
不懂cast可以去google
2009-09-14 16:10
自学
Rank: 2
等 级:论坛游民
帖 子:17
专家分:31
注 册:2009-9-14
收藏
得分:0 
学到了
2009-09-14 17:10
快速回复:定义字符指针并初始化,指针变量所指向的字符串存在哪个地方呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015886 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved