看这2个C程序,关于指针和数组的

main(){charstr[][10]={"China","Beijing"},*p=*str;printf("%s\n",p+10);}我知道输出结果是Bei... main() {char str[][10]={"China","Beijing"},*p=*str; printf("%s\n",p+10); } 我知道输出结果是Beijing。但是不是特别明白,p指向的是str[0][0]啊,还是指向的str[0]?希望详细地解释一下。 main(){ char *p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”}; printf(“%d\n”,strlen(p[4])); } 这个我知道是输出2,是“cd”的长度。但是不是太明白p[10]看起来是一维数组,怎么会像二维数组赋值的方式给它赋值呢? 以上两个题能回答几道就回答几道。 展开
 我来答
关枫太史又蓝
2020-04-29 · TA获得超过3620个赞
知道小有建树答主
回答量:3107
采纳率:28%
帮助的人:461万
展开全部
第一个问题:
这里,p存的是二维数组str的首元素的首地址,也就是指向str[0][0]。
p是个char
*,即指向的对象存的是char类型,所以p+10就是从p指向的位置str[0][0]向后移动了10个char单位。
二维数组定义为str[][10],可以看做是n个一维数组,每个一维数组有10个字符。这里初始化的时候将第一个一维数组初始化为"China",第二个初始化为"Beijing",所以P+10向后移动10个单位后,p就指向了‘B’,所以输出为Beijing。
比如这里不是p+10,而是p+3,那么就向后移动了3个char,指向了‘n’,此时输出就为na。
第二个问题:
首先,要搞清楚,char
*p[10]是什么,由于[
]的优先级比*高,故p是先和[
]组合,
所以,这里char
*p[10]其实是定义了一个指针数组,p是个数组,数组的每个元素都是一个指向char类型的指针,这里定义的时候进行了初始化,将10个指针分别指向了那几个字符串,
char
*ptr
=
"abcde";
这个应该理解吧,就是将一个指针指向一个字符串,
char
*p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”};一样,不过是定义了10个指针,这10个指针是个数组,每个指针指向一个字符串。
所以p[4]就是指数组的第5个元素,它也是个指针,指向字符串"cd",所以strlen(p[4])=2
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式