开发者社区> 问答> 正文

对比两者的差异,为什么后面一个报错??报错

char *s ="开源中国"
char *prgv[]= {"开源中国","hello","world",NULL};
char **avgr;
*avgr =prgv[0];//报错,因为 *avgr 的类型是指针,prgv0的类型是字符型。类型不同,不能赋值

如果,这样解释的话,那么 "开源中国"也是字符型啊,为什么

char *s ="开源中国"  就可以呢?

当然有人解释说,s 指向了“开源中国”字符串的首地址

prgv[0]对应字的符串“开源中国”,为什么我不能理解为 *avgr指向了“开源中国”字符串的首地址?

 

 

展开
收起
爱吃鱼的程序员 2020-06-06 09:45:54 369 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>你的代码没错。你所指的报错,是不会出现的。*avgr就是指向了“开源中国”字符串的首地址。以下代码为证。</p> 
    
    1. prgv 是 字符指针数组。 数组中的每一个指针,指向一个给定的字符串。比如,prgv[ 1 ] 指向字符串"hello"。
    2. avgr 是一个指向字符指针的指针,保存着一个字符(串)指针的地址。这个地址,可以从 *avgr 得到。
    3. *avgr =prgv[ 0 ]; 代码没有错误。执行这行代码之后,字符串 "开源中国" 的地址,即此串的首地址,就赋予 *avgr。 
    #include<stdio.h>
    int main(){
       	char *s ="开源中国";
    	char *prgv[]= {"开源中国","hello","world",NULL}; //prgv 是字符指针数组。 
     	char **avgr; //argr 是一个指向字符指针的指针 
    	*avgr =prgv[ 0 ]; /*没错,*avgr 的类型是字符指针,prgv[ 0 ]的类型也是字符指针型。
    	执行此行代码,使得 *avgr 指向 prgv[ 0 ] 所指的字符串"开源中国"。*/
    	printf("%s\n", *avgr); //输出 prgv[ 0 ]所指的字符串 "开源中国" 
        return 0;
    }

    输出:开源中国

                        <div class="ref"> 
    

    引用来自“tcxu”的评论

    你的代码没错。你所指的报错,是不会出现的。*avgr就是指向了“开源中国”字符串的首地址。以下代码为证。

    1. prgv 是 字符指针数组。 数组中的每一个指针,指向一个给定的字符串。比如,prgv[ 1 ] 指向字符串"hello"。
    2. avgr 是一个指向字符指针的指针,保存着一个字符(串)指针的地址。这个地址,可以从 *avgr 得到。
    3. *avgr =prgv[ 0 ]; 代码没有错误。执行这行代码之后,字符串 "开源中国" 的地址,即此串的首地址,就赋予 *avgr。 
    #include<stdio.h>
    int main(){
       	char *s ="开源中国";
    	char *prgv[]= {"开源中国","hello","world",NULL}; //prgv 是字符指针数组。 
     	char **avgr; //argr 是一个指向字符指针的指针 
    	*avgr =prgv[ 0 ]; /*没错,*avgr 的类型是字符指针,prgv[ 0 ]的类型也是字符指针型。
    	执行此行代码,使得 *avgr 指向 prgv[ 0 ] 所指的字符串"开源中国"。*/
    	printf("%s\n", *avgr); //输出 prgv[ 0 ]所指的字符串 "开源中国" 
        return 0;
    }

    输出:开源中国

                            在我这里,你我的两套代码都没报错。我的环境是:Dev-C++。
    
    2020-06-06 09:46:10
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
面向失败设计 立即下载
APP加固新方向 --混淆和瘦身 立即下载
分析型数据库标准发展与行业观察 立即下载