小甲鱼第23课数组指针的问题
本帖最后由 搞搞编程Kyle 于 2018-12-19 16:12 编辑01.#include <stdio.h>
02.
03.int main()
04.{
05. char *array = {"FishC", "Five", "Star", "Good", "WoW"};
06. char *(*p) = &array; //这里为什么不可以定义成 char (*p) = &array
07. int i, j;
08.
09. for (i = 0; i < 5; i++)
10. {
11. for (j = 0; (*p) != '\0'; j++)
12. {
13. printf("%c ", (*p));// array数组中字符串不是以组的形式存在的吗 为什么可以逐个输出了??
14. }
15. printf("\n");
16. }
17.
18. return 0;
19.}
问题有两个,标在上面的代码里了,求各位大神赐教。 第一个问题:因为数组指针指向的数组里面的元素为字符指针元素,所以说要char后面加上*,同理如果是
字符元素的话就不用加*了。
首先06行的问题,因为前面的array你定义的是一个指针类型,13行问题,前边的程序相当于把array这个一维字符串数组,改变为p[][]的二维数组,因为数组在内存空间是线性存储的。 第二个问题:字符串就是一串字符排列在一起嘛,一个挨着一个的,所以也可以一个一个的输出。就像咱们
平时输出字符串的时候其实也是一个一个的,给一个首地址,按照%s的格式输出,计算机找到这地址之后
把里面的值都输出出来,遇到\0就停止输出了 1:
要看*(*p)这里首先得看*array;因为array 是一个指针数组,所以(*p)必须也得是一个指向数组指针的指针。一句话就是你加*,我也加*。要不就都不加
array又必须得加* ,为什么,原因很简单,因为数组里面存放的是字符串,而C没有字符串的概念。所以就用指针数组来存入所谓“字符串”的第1个字符的地址。
看不加*的例子。字符:
int main()
{
char a={'A','B','C','D', 'E'}; // 注意 这里是字符
char (*p3) = &a;
int i=0;
for(i=0; i<5; i++)
{
printf("%c\n", (*p3));
}
return 0;
}
2:
char *array = {"FishC",
"Five",
"Star",
"Good",
"WoW"};
正如前面所说,这是一个指针数组,每个字符串都是一个地址,i索引到地址,j则索引到里面的每个字符(道理跟2维数组一样)
页:
[1]