学点C语言(22):数据范例 – 多维数组与指针
副标题#e#
1. 关于数组的首地点:
#include <stdio.h>
int main(void)
{
char cs[2][3] = {
{'A','B','C'},
{'D','E','F'}
};
char *p1,*p2,*p3,*p4;
p1 = p2 = p3 = p4 = NULL;
/* 下面四个指针都是指向了同一个地点 */
p1 = &cs[0][0]; /* 这个最好领略 */
p2 = &cs[0];
p3 = &cs;
p4 = cs; /* 这个最利便 */
printf("%p\n%p\n%p\n%p\n", p1, p2, p3, p4); /* 显示地点 */
printf("\n%c %c %c %c\n", *p1, *p2, *p3, *p4); /* 显示内容 */
getchar();
return 0;
}
2. 数组其他元素的地点:
例子中,数组的元素在内存中应该是这样分列的:
[0][0] [0][1] [0][2] [1][0] [1][1] [1][2]
下面是通过指针的方法获取数组的第三个元素:
#include <stdio.h>
int main(void)
{
int nums[2][3] = {
{11,12,13},
{21,22,23}
};
int *p1,*p2;
p1 = p2 = NULL;
p1 = &nums[0][2];
p2 = nums;
p2 = p2 + 2;
// p2 = (int *)nums + 2; /* 可能用这一句替换上面两行 */
printf("%d,%d\n",*p1,*p2);
getchar();
return 0;
}
#p#副标题#e#
3. 遍历数组的普通要领:
#include <stdio.h>
int main(void)
{
int nums[2][3] = {
{11,12,13},
{21,22,23}
};
int i,j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("%d\n",nums[i][j]);
}
}
getchar();
return 0;
}
4. 通过指针遍历数组:
#include <stdio.h>
int main(void)
{
int nums[2][3] = {
{11,12,13},
{21,22,23}
};
int *p = nums;
int i;
for (i = 0; i < 6; i++) {
printf("%d\n",*(p+i));
}
getchar();
return 0;
}
#include <stdio.h>
int main(void)
{
char cs[2][3] = {
{'A','B','C'},
{'D','E','F'}
};
char *p = cs;
unsigned i;
for (i = 0; i < sizeof cs / sizeof cs[0][0]; i++) {
printf("%c\n",*p++);
}
getchar();
return 0;
}
#include <stdio.h>
int main(void)
{
char cs[2][3] = {
{'A','B','C'},
{'D','E','F'}
};
int i;
for (i = 0; i < 6; i++) {
printf("%c\n",*(*cs + i)); // *cs是什么?看下例
}
getchar();
return 0;
}
5. 再探数组的指针地点:
#include <stdio.h>
int main(void)
{
char cs[2][3] = {
{'A','B','C'},
{'D','E','F'}
};
//在本例中(二维数组)
// cs是指向数组cs[0]的地点
// *cs是指向cs[0][0]的地点
printf("%p,%p\n",cs,*cs);
// **cs 指向 cs[0][0] 的值
printf("%c,%c\n",**cs,cs[0][0]);
getchar();
return 0;
}
6. 利用指针遍历三维数组:
#include <stdio.h>
int main(void)
{
char cs[2][2][3] = {
{
{'A','B','C'},
{'D','E','F'}
},
{
{'1','2','3'},
{'4','5','6'}
}
};
int i;
int count = sizeof cs / sizeof cs[0][0][0];
for (i = 0; i < count; i++) {
printf("%c\n",*(**cs + i));
}
getchar();
return 0;
}
7. 遍历多维数组照旧用指针变量更容易领略:
#p#分页标题#e#
#include <stdio.h>
int main(void)
{
char cs[2][2][3] = {
{
{'A','B','C'},
{'D','E','F'}
},
{
{'1','2','3'},
{'4','5','6'}
}
};
char *p = (char *)cs; /* 相对上面的例子,这里加了范例转换;这样编译器就没有提示了 */
int i;
int count = sizeof cs / sizeof cs[0][0][0];
for (i = 0; i < count; i++) {
printf("%c\n",*p++);
}
getchar();
return 0;
}
返回“学点C语言 – 目次”