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

天王盖地虎626 发布于 03/26 17:42
阅读 80
收藏 0

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

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

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

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

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

 

 

加载中
0
tcxu
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;
}

输出:开源中国

0
天王盖地虎626
天王盖地虎626

引用来自“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;
}

输出:开源中国

你的分析错啦,我这边是报错的,我这边修改了下,就可以了

#include <stdlib.h>
#include<stdio.h>
int main(){
        char *s ="aaaa";
        char *prgv[]= {"aaaa","hello","world",NULL}; //prgv 
        char **avgr; //argr 
        avgr = (char **) malloc(sizeof(char**));
        *avgr =prgv[ 0 ];

        printf("%s\n", *avgr); 
    return 0;
}

tcxu
tcxu
在我这里,你我的两套代码都没报错。我的环境是:Dev-C++。
返回顶部
顶部