| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 801 人关注过本帖
标题:问一个关于指针和数组的问题
只看楼主 加入收藏
iamyangfan
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2004-8-26
收藏
 问题点数:0 回复次数:4 
问一个关于指针和数组的问题

(1)书上说"在执行完如下初始化: char *p="this"后,程序将字符串首地址存入指针变量p,而不是将字符串this存入变量p。"

我对它的理解是,在上述初始化后,p与&p[0]相等,表示字符串"this"的首地址,可是在我用ctrl+F4检查却得出p==&p[0]=="this",这是为什么?

(2) "对于如下定义的数组:int a[4]={1,2,3,4} 其中数组名a也是一格指针,指向数组的第一个元素a[0],由此可见a与&a[0]完全相同。

我还是用ctrl+F4检查得出&a[0]==FFD0,而a=={1,2,3,4}都把握搞糊涂了,是不是我哪

理解错了,请高人指教

搜索更多相关主题的帖子: 指针 
2004-09-04 12:55
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
得分:0 

Ctrl+F4 ?

这是什么啊?

不懂?


2004-09-04 16:54
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 

char *p="this" 这个只是一个指针赋地址操作,意思是把指针p指向常量字符串“this”的首地址,“this”在内存中是固定的,不能被改变的 所以说执行这样的操作试图改变字符串的值是错误的,如下: p[0] = 'A'; // 此处编译器并不认为有什么错误,但是使用DEBUG,程序执行到这句时会出错,因为试图改变一个常量字符串

再看下面的程序: p = (char *)malloc( (strlen("This") + 1) * sizeof(char) ); strcpy(p, "this"); 这样的话才把字符串“this” 存入到指针p所指向的内存中。

你上面的疑问我也不知道,反正你只要注意指针指向哪就行了,其他的不管,还要注意的是:指针是可以指向任何内存的,而数组名只是表示数组的首地址,是不能被改变的。


如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2004-09-05 13:11
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

p[0] = 'A';

这个错在那里?


淘宝杜琨
2004-09-05 13:37
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 

char a[] = hello;

a[0] = X;

cout << a << endl;

char *p = world; // 注意p指向常量字符串

p[0] = X; // 编译器不能发现该错误

cout << p << endl;

字符数组a的容量是6个字符,其内容为hello\0a的内容可以改变,如a[0]= ‘X’。指针p指向常量字符串“world”(位于静态存储区,内容为world\0),常量字符串的内容是不可以被修改的。从语法上看,编译器并不觉得语句p[0]= ‘X’有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误。


如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2004-09-05 14:14
快速回复:问一个关于指针和数组的问题
数据加载中...
 
   



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

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