标题:我想输出字符指针数组,求大神看一下程序哪儿错了
只看楼主
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:1 
以下是引用神话嵌入式在2014-11-26 09:42:03的发言:

#include
int main(int argc,char *argv[])
{
    char *available_resource[]={"coulor monitor","big disk","cray","on-line drawing routhing","mouse","keyboard","power cable"};
    char **p=available_resource;
    while(**p!='\0')
        {
            printf("%s\n",*p);
            p++;
        }
    return 0;
}
为什么初始化数组的时候去掉"\0"就出问题呢?不是默认"\0"结尾吗?
默认结束符说的是字符串或者字符数组,
而你这里初始化的是指针数组,只不过使用了一些字符串的首地址来初始化指针数组而已,不要混淆了概念。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2014-11-26 10:53
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
得分:2 
以下是引用神话嵌入式在2014-11-25 14:07:53的发言:

char #include<stdio.h>
void main()
{
    *available_resource[]={"coulor monitor",
    "big disk",
    "cray"
    "on-line drawing routhing",
    "mouse",
    "keyboard",
    "power cable"};
    while(*(available_resource++)!=NULL)
        {
            while(*(*available_resource++)!='\0')
            printf("%c",*(*available_resource));
                }
}
Compiling...
CZhuanJiaBianChen_example.cpp
D:\vc6.0\Microsoft Visual Studio\MyProjects\CZhuanJiaBianChen\CZhuanJiaBianChen_example.cpp(81) : error C2105: '++' needs l-value
D:\vc6.0\Microsoft Visual Studio\MyProjects\CZhuanJiaBianChen\CZhuanJiaBianChen_example.cpp(83) : error C2105: '++' needs l-value
执行 cl.exe 时出错.
这是出的问题?

指针和数组在大多数情况下可以互换着用。但它们还是有本质的区别的,在你的代码里这种区别就表现出来了。数组名可以被看做是一个指针常量,它是不可修改的左值。所以一些有副作用的操作符就不能用在数组名上。比如自增自减等。对于字符指针和字符数组来说虽然表面看起来也是没有区别的,但它们的底层机制是完全不同的。在ANSI C中,如果像下面这样初始化一个字符指针:char *p = "abcd"。则这个字符串将被定义为只读,也就是说你无法通过下面这样修改这个字符串:*p = 'e'。这将导致程序出现未定义的行为。但数组却可以,像下面这样就是合法的:char a[] = "abcd"; *a = 'e'。运行之后数组内容会变成“ebcd”。
现在总结一下指针和数组的异同:
一、在声明的时候
除了在函数参数的声明中,数组和指针可以互换外,其它任何情况下的声明都不行。
二、在使用的时候
在引用的时候,你可以选择自己喜欢的形式,随便使用指针形式或者数组形式。仅仅是使用形式上*(p+2)= p[2]。其它情况请不要认为数组和指针是一样的。
三、在编译器处理时
在编译器处理时,数组是一个地址,而指针是一个地址的地址。
最后,给几个有趣的例子,试着实际运行一下:
int a[10]; int * p = a;
1、sizeof(a)与sizeof(p)一样吗?
2、&a 与 &p 一样吗?
3、用字符串常量分别初始化字符数组和字符指针,效果一样吗?当然,这一点上面已经讲过了,这里再给个更有趣的例子:putchar("0123456789"[1]);这个语句是对是错?这里之所以讲了这么多关于字符串常量的东西,是因为数组和指针本来已经够不好区分了,再加上字符和字符串的区分,那更是让人头疼,最后如果再加上变量和常量区分,那更是让人崩溃。但你必须把它们全部理清楚,要不然永远学不好C。

[qq]949654600[/qq]
2014-11-27 22:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-439136-1-1.html




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

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