vlambda博客
学习文章列表

C语言第十篇:数组(中)



C语言第十篇数组(中)


It's a Title




二.指向二维数组元素的指针





当指针p指向二维数组中的某个元素后,可以用指针p访问二维数组的所有元素。
例:

int a[2][5];

int *p = &a[0][0];

C语言第十篇:数组(中)
C语言第十篇:数组(中)

假设指针变量p已经指向共有M行N列的数组A的首元素,则:

二维数组a[ ][ ]的有关指针

(注意:&a[i]和a[i]值虽然一样,但&a[i]或a+i指向行,而a[i]或 * (a+1)指向列)

C语言第十篇:数组(中)





三.指向数组首元素的

指针变量的运算





若指针变量p指向数组a的首元素,则:

1)p++(或p+=1)

p指向下一个元素。

2)*p++

相当于 *(p++)。都是先取 *p 的值,然后使p加1。

3) *(p++)与 *(++p)

*(p++)同 *p++,先取 *p 的值,然后使p加1;

*(++p)先使p加1,然后取 *p 的值。

若p初值为a(即&a[0]),若输出 *(p++),得到a[0]的值,若输出 *(++p),得到a[1]的值。

4)(*p)++

表示p指向的元素值加1。相当于(a[0]++)。

5)如果指针指向数组a的非首元素a[i]。则:


*(p–)相当于a[i–],先取 *p,再使p减1.

*(p++)相当于a[++i],先使p+1,在取 *p.

*(–p)相当于a[–i],先使p-1,在取 *p.

C语言第十篇:数组(中)

指针数组和数组指针的区别

指针数组:指针数组可以说成是“指针的数组”,首先这个变量是一个数组。

其次,“指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型。

在 32 位系统中,指针占四个字节

C语言第十篇:数组(中)

数组指针:数组指针可以说成是“数组的指针”,首先这个变量是一个指针。

C语言第十篇:数组(中)

指针数组的例题

//将若干字符串按字母顺序(由小到大)输出

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

void sort(char *name[], int n)             //对字符串排序

{

       char *t;

       int i, j, k;

       for (i = 0; i < n - 1; i++)              // 用选择法排序

       {

              k = i;

              for (j = i+1; j < n; j++)

              {

                     if (strcmp(name[k], name[j])>0)

                            k = j;

              }

              if (k != i)

              {

                     t = name[i];

                     name[i] = name[k];

                     name[k] = t;

              }

       }

}

void print(char *name[], int n)     //打印

{

       int i;

       for (i = 0; i < n; i++)

       {

              printf("%s\n", name[i]);

       }

}

int main()

{

        int n = 5;

       print(name, n);

       system("pause");

       return 0;

}






C语言    

END

小课堂   


C语言第十篇:数组(中)

南师大物科院

整理:何佳柠

排版:许嘉艺

审核:苏泳、陈司