| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1083 人关注过本帖
标题:奇怪的指针问题,欢迎进来讨论
只看楼主 加入收藏
crazyboy216
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-6-28
收藏
得分:0 

1,如果将第4行改为printf("%s",*pt),结果居然是内存不能为read
(我认为把 printf("%s",*pt);%s改成%c就可以,)
2,char *data[10]={"one","two","three","four"};
char data[10][10]={"one","two","three","four"};
请问这两行有什么区别?
(我人为只是第二种规定了引号里面的字符不能超过10,别的没多少区别)
3,di 3 ge wen ti wo zhichi "boot2046" de jianjie.
a[]="china"
*p="china"

第一种是在栈上分配的,所以对他进行修改是没有问题的
第二种是在只读存储区分配的,去修改一块只读的内存就会引起段错误

2007-07-24 13:02
crazyboy216
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-6-28
收藏
得分:0 

不好意思我改错了,我在我的机子上运行 printf("%s",*pt);可以出结果,为china
我的编译器是Dev c++4.

2007-07-24 13:28
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
回复:(spitcold)奇怪的指针问题,欢迎进来讨论
我来说说第二个问题吧:

char *data[10]是一个指针数组,他有10个元素,每个元素是一个指针
char data[10][10]是一个二维数组,10行10列

这两种不同的定义在程序中也是有区别的:
char *data[10]={"one","two","three","four"};
char data[10][10]={"one","two","three","four"};

看两个简单的例子
#include <stdio.h>
void main()
{
char data[][10] = {"one","two","three","four"};
data[0][1] = 'S';
printf("%s",data[0]);
}

#include <stdio.h>
void main()
{
char *data[10] = {"one","two","three","four"};
data[0][1] = 'S';
printf("%s",data[0]);
}
第一个程序能够正确运行,第二个却会报错
原因嘛就和我在第三个问题中提到的是一样的

Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-07-24 13:36
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 


#include <stdio.h>
void main()
{
char *data[10] = {"one","two","three","four"};
data[0][1] = 'S';
printf("%s",data[0]);
}

data[0][1] = 'S';

如果是data[0][0]呢?

自我放逐。。。
2007-07-24 13:42
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
呵呵
如果是data[0][0]呢?

一样的效果

Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-07-24 13:46
crazyboy216
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-6-28
收藏
得分:0 

#include <stdio.h>
void main()
{
char *data[10] = {"one","two","three","four"};
data[0][1] = 'S';
printf("%s",data[0]);
}

我运行了上面的程序,可以通过编译,只是不输出任何东西来。我用的是Dev c++4.0,不晓得是什么原因。
还有我发表下我自己的意见。
data[0][1] = 'S';我总觉得这个有问题,应该用*data+1='s'才是OK 的吧

忘高手指导

2007-07-24 18:05
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
data[0][1] = 'S';
我这个操作只是修改一下第一个字符串one中的第二个字符,把n改为S,其实改什么无所谓,只是举个例子,说明这样修改只读存储区会出错
编译是肯定能编译通过的
运行肯定是不正常的
因为我是在Linux系统下,所以他会给出一个段错误,在windows下是什么我就不清楚了

Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-07-24 18:18
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
收藏
得分:0 
"*"是地址,当然不能输出拉

(づ ̄ 3 ̄)づ
2007-07-24 18:26
panxiang88
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-7-21
收藏
得分:0 
注意行指针不时指针的指针
2007-07-24 20:58
快速回复:奇怪的指针问题,欢迎进来讨论
数据加载中...
 
   



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

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