| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2888 人关注过本帖
标题:这样是给指针数组赋值还是给指针数组指向的内存赋值?下面是否正确?
只看楼主 加入收藏
shade1220
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-8-5
收藏
 问题点数:0 回复次数:11 
这样是给指针数组赋值还是给指针数组指向的内存赋值?下面是否正确?
char *available_resouces[]={
"color monitor",
"big disk",
"cray",
"mouse"
}
搜索更多相关主题的帖子: 赋值 内存 指针 
2008-09-08 09:34
shade1220
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-8-5
收藏
得分:0 
又为何char *p=&a;是给p指针赋地址呢;这和上面好像完全是2个意思.为何?

踏踏实实学习,认认真真编程
2008-09-08 10:06
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
char* arr[10];

这里其实定义了十个指针。相当于

char *p1,*p2,...;

所以

char* arr[]={"1","2","3",....};

相当于

char *p1="1",*p2="2",....;

注意只是相当于,其内部实现有一点区别,不过无所谓。

而"1"本质上,是在编译后一个存储了"1"这个字符串的内存的[bo]地址[/bo],char *p="1";和char str[]="1",*p=str;没有区别。
收到的鲜花
  • 广陵绝唱2009-01-07 18:12 送鲜花  49朵   附言:学习雷锋好榜样。 爱编程,爱BCCN。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-08 11:12
shade1220
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-8-5
收藏
得分:0 
了解了,谢谢版主

踏踏实实学习,认认真真编程
2008-09-08 12:40
csynyk
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2008-8-9
收藏
得分:0 
to:斑竹
   你前面都讲解的非常精彩,不过最后以句却没有考虑周到:
"...是在编译后一个存储了"1"这个字符串的内存的地址,char *p="1";和char str[]="1",*p=str;没有区别。"
   其实他们的区别很大:
char *p="1";-------------p指向的区域不可写,只能读
char str[]="1",*p=str;---p指向栈内空间,可读可写
收到的鲜花
  • 广陵绝唱2009-01-07 18:13 送鲜花  49朵   附言:讨论得很精彩。 爱编程,爱BCCN。

http://blog./csynyk
2008-09-08 14:23
csynyk
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2008-8-9
收藏
得分:0 
char *available_resouces[]={  "color monitor",
                              "big disk",
                              "cray",
                              "mouse"
                            };
完全等同于:
char *available_resouces[4]={  "color monitor",
                              "big disk",
                              "cray",
                              "mouse"
                            };
展开来就是:
char *available_resouces[4]; //其实只分配了4个指针变量的空间
      available_resouces[0]="color monitor";//字符串的地址在静态数据区,可读不可写。
      available_resouces[1]="big disk";
      available_resouces[2]="cray";
      available_resouces[2]="mouse";

http://blog./csynyk
2008-09-08 14:29
shade1220
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-8-5
收藏
得分:0 
[bo][un]csynyk[/un] 在 2008-9-8 14:23 的发言:[/bo]

to:斑竹
   你前面都讲解的非常精彩,不过最后以句却没有考虑周到:
"...是在编译后一个存储了"1"这个字符串的内存的地址,char *p="1";和char str[]="1",*p=str;没有区别。"
   其实他们的区别很大:
char *p=" ...

1.char str[]="1",*p=str;中,第2个表达式的str是字符数组的首地址,改为p=str,然后打印时使用printf("%s",p);
2.不改变使用printf("%s",*p);结果耐人寻味啊.

踏踏实实学习,认认真真编程
2008-09-08 18:51
shade1220
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-8-5
收藏
得分:0 
我刚才去试了下,好像*p=str不可以这样写

踏踏实实学习,认认真真编程
2008-09-08 18:58
shade1220
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-8-5
收藏
得分:0 
总结:char *p="1";

可以写成  {char str[]="1";
          char *p=str;}     //试给指针变量赋值,而非p指向的空间

或者      {char str[]="1";
           char *p;
           p=str;}

踏踏实实学习,认认真真编程
2008-09-08 19:03
loveJE
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-9-8
收藏
得分:0 
非也 可以在初始化的时候 char *p=str;
或者 char *p;
     p=str;
2008-09-08 19:06
快速回复:这样是给指针数组赋值还是给指针数组指向的内存赋值?下面是否正确?
数据加载中...
 
   



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

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