C语言,下面程序不知道哪里不对?求解释?另外数组指针表示地址,而数组名也能表示地址,他们有什么差别?

main()
{
char strings[] =
{
"C language", "Basic", "World wide", "Olympic", "Great Wall"
};
char *p, i;
p = strings;
for (i = 0; i < 5; i++)
{
printf("%s\n", (p + i));
}
}

第1个回答  2011-04-03
p = strings;这里有问题,strings是一个二维指针,要么你就修改p的类型,要么你就修改p=strings【0】
数组名表示的地址是不能修改的,即数组名不能被赋值,而指针变量是可以被赋值修改的
第2个回答  2011-04-03
程序修改为:
{ //strings 是一个指针型指针数组,每个数组元素都是一个字符型指针
char *strings[] = { "C language", "Basic", "World wide", "Olympic", "Great Wall" };
char **p, i; //p是一个字符型指针的指针,用于记录一个字符型指针变量的地址
p = strings;
for (i = 0; i < 5; i++)
{ printf("%s\n", p[i]); // 或者prinft("%s\n",*(p+i)); 效果相同
}
}
输出结果为:
C language
Basic
World wide
Olympic
Great Wall
这个是你想要的结果吧?
p需要记录字符指针数组的首地址所以要 **p 定义
p+i 是下一个字符串的首地址,需要指定求值才能得到该地址指定的字符串,所以要加上 *本回答被提问者采纳
第3个回答  2011-04-03
main()
{
char *strings[] = //二维字符数组(字符串数组)的定义,应该这样吧
{
"C language", "Basic", "World wide", "Olympic", "Great Wall"
};
char **p, i; //此处的p也应该定义成二维字符数组的形式,
p = strings;
for (i = 0; i < 5; i++)
{
printf("%s\n", *(p + i)); //取字符串时,p是地址,*p才是它的内容
}

}

另外一个问题,如一楼所说!数组和指针都可以当作参数来处理,但是采用指针的概率要高一些,因为指针较数组更加灵活。
第4个回答  2011-04-04
例如&a[10]表示的第十一位元素的地址,*a表示的内容。。。不一样的。。。
你的程序应该定义成二维数组的。。。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网