有关二级指针char **p 的问题



int main()
{
	char *str[] = {"welcome", "to", "Fortemdia", "Nanjing"};			// str: 指针数组,其每个都是一个指向 char 数据类型的指针
																		// str[0] 指向 "welcome",
																		// str[1] 指向 "to"
																		// str[2] 指向 "Fortemdia",
																		// str[3] 指向 "Nanjing"

	char **p = str + 1;													// p: 指针的指针(a pointer to pointer to char), 
										// 以 p 命名的内存空间 (variable) 中存储了指向一个指向字符指针的内存首地址 -- data type: 指针
										// 变量 p 被初始化指向一个字符指针,此指针指向 "to"
	str[0] = (*p++)+1;												    // *p 是字符指针, (*p + 1)指向下一个字符
	printf("%s\n", str[0] );											// *p指向 str[2]位置

	str[1] = *(p+1);													// *(p+1) 指向 str[3]位置,注意此时 str[1] = "Nanjing"
	printf("%s\n", str[1] );											

	str[2] = p[1]+3;													// *p指向 str[2]位置, p[0] =  "Fortemdia"
	printf("%s\n", str[2] );											// p[1] =  "Nanjing",  p[1] + 3 =  "jing"
																		// 此时 str[2] = "jing"

	str[3] = p[0];														// 由上一步 可知 *p指向 str[2]位置上换成了"jing"
	printf("%s\n", str[3] );											// p[0] 指向了 j
	system("pause");
}

posted @ 2021-09-23 18:23  叶梓渔  阅读(409)  评论(0)    收藏  举报