多维数组下指针使用总结

来源:互联网 发布:淘宝上宝贝卖点怎么写 编辑:程序博客网 时间:2024/05/01 07:23

===============================================================

本文总结以下四种形式指针的用法:


第一种

int (*pi)[MAX]; //pi指向含有MAX个int元素的数组


使用如下,可用于处理二位数组:

#include <stdio.h>#define MAX 3int 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 3int main(void){int arrayInt1[MAX] = { 1, 2, 3 };int arrayInt2[MAX] = { 4, 5, 6 };int * pi[MAX]; //包含三个指向int的指针pi[0] = arrayInt1; //令其中第1个指针pi[0]指向arrayInt1pi[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 3int 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 3int 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指针要想熟练掌握还得多用。






















0 0