我来解释一下吧,关于这句初始化:
char *p1[5] = {
"让编程改变世界 -- 鱼C工作室",
"Just do it -- NIKE",
"一切皆有可能 -- 李宁",
"永不止步 -- 安踏",
"One more thing... -- 苹果"
第一行也可以这样解释:
*p1[0] = {"让编程改变世界 -- 鱼C工作室"}
那么p1[0] = 字符串首地址(注意,没*的才是地址)
和普通的字符串,比如char str[10]比较的话,就相当于没有指定字符数量而已,比如: char str[] ={"让编程改变世界 -- 鱼C工作室"},而str就是首地址!
(另外注意一点,str和p1[0]还是有区别的,这以后再行解释,但是基于字符串来说,用法很相似。)
字符串,实际上就是一个由char元素组成的数组,而输出时:
比如printf("%s", str)我们给出的str是数组的首地址,printf会根据"\0"所在位置自动判断输出多少个字符。
那么,从上面定义来看,char *p1[5]这个指针数组里存储了5个首地址,他们分别是p1[0],p1[1],p1[2],p1[3],p1[4](还是请注意这里没*号)
所以,你的程序输出就变成printf("%s\n", p1[i]),不知道这样解释会不会清楚一点!