===============================================================
本文总结以下四种形式指针的用法:
第一种
int (*pi)[MAX]; //pi指向含有MAX个int元素的数组
使用如下,可用于处理二位数组:
#include <stdio.h>
#define MAX 3
int main(void)
{
int arrayInt[][MAX] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int (*pi)[MAX] = arrayInt;
//以下输出arrayInt数组的第2行
for (int i = 0; i < MAX; i++)
printf("%d ", *(*(pi + 1) + i));
putchar('\n');
return 0;
}
第二种
int *pi[MAX]; //由MAX个指向 int 的指针组成的数组,[]优先级高于*
使用如下:
#include <stdio.h>
#define MAX 3
int main(void)
{
int arrayInt1[MAX] = { 1, 2, 3 };
int arrayInt2[MAX] = { 4, 5, 6 };
int * pi[MAX]; //包含三个指向int的指针
pi[0] = arrayInt1; //令其中第1个指针pi[0]指向arrayInt1
pi[1] = arrayInt2; //令其中第2个指针pi[1]指向arrayInt2
//*(*(pi + 0) + 1) <==> pi[0][1] 两者等价
for (int i = 0; i < MAX; i++)
printf("%d ", *(*(pi + 0) + i ));
putchar('\n');
for (int i = 0; i < MAX; i++)
printf("%d ", pi[1][i]);
putchar('\n');
return 0;
}
第三种
char *ps[MAX]; //由MAX个指向char 的指针组成的数组,同样地[]优先级高于*
使用如下,可用于处理多个字符串数组:
#include <stdio.h>
#define MAX 3
int main(void)
{
char *ps[MAX] = {
"I'm",
"learning",
"C language"
};
for (int i = 0; i < MAX; i++)
puts(ps[i]); //第i行字符串的首地址即为ps[i]
putchar('\n');
return 0;
}
第四种
char (*ps)[MAX]; //指向含有MAX个字符元素的字符串数组
使用如下,可用来处理字符数组,不常用:
<pre name="code" class="cpp">#include <stdio.h>
#define MAX 3
int main(void)
{
char arrayChar[][MAX] = {
{ 'a', 'b', 'c' },
{ 'd', 'e', 'f' },
{ 'g', 'r', 'y' }
};
char(*ps)[MAX] = arrayChar;
//输出arrayChar字符数组的第2行
for (int i = 0; i < MAX; i++)
printf("%c ", *(*(ps + 1) + i));
putchar('\n');
return 0;
}
总之,C指针要想熟练掌握还得多用。