0.本来十分不解,不能理解形如
int (*p)[100];
这样的东西。
1.
百度了一下,大概理解数组指针如果用来处理二维数组,指向的是每”行“的第零个元素的地址。
比如有:
int array[100];
int (*p)[100];
p = array;
//第二行的100是个提示,提示你一行有100个元素
那么有
*(p) //array[0],即第零行第零个元素的地址
*(p + i) //array[i]
*(p + i) + j //array[i][j]的地址
*(*(p + i) + j) //array[i][j]的值
2.
程序L11-1,功能是输入若干字符串,找出其中最长的一句
原来用text[0]的实现:
//L11-1
#include <stdio.h>
#include <string.h>
int main()
{
char text[100][100] = {0};
printf("输入一些文本:\n");
//输入文本
int i = 0;
while(1)
{
gets(text[i]);
if (0 == strlen(text[i]))
{
break;
}
i++;
}
//处理
int j = 0;
char* max = text[j];
for (j = 0; j < i; j++)
{
if ( strlen(max) < strlen(text[j+1]) )
{
max = text[j+1];
}
}
printf("最长的行是%s",max);
return 0;
}
改用数组指针后:
//L11-1
#include <stdio.h>
#include <string.h>
#include <assert.h>
int main()
{
char text[100][100] = {0};
printf("输入一些文本:\n");
char (*p)[100];
p = text;
//输入文本
int i = 0;
while(1)
{
gets(*(p+i));
if (!strlen(*(p+i)))
{
break;
}
i++;
}
//处理
int j = 0;
char * max = *p;
//char (*max)[100] = text;
for (j = 0; j < i; j++)
{
if ( strlen(max) < strlen(*(p+j)) )
{
max = *(p+j);
}
}
printf("最长的行是%s",max);
return 0;
}
3.
此程序中有等价关系:
int text[20][100] = {0};
int * p = text[0];
//等价于
int (*p)[100] = text; //赋值关系是p = text;
-------------------------------------
4.仍然有疑问:
这种所谓“指向数组的指针”和普通的指向一维数组的普通指针有何区别?
int array1[10] = {0};
int * p1 = array1;
int array2[10][10] = {0};
int (*p2)[10] = array2;
//这有区别?=.=