C语言第十篇:数组(中)
C语言第十篇数组(中)
It's a Title
二.指向二维数组元素的指针
当指针p指向二维数组中的某个元素后,可以用指针p访问二维数组的所有元素。
例:
int a[2][5];
int *p = &a[0][0];
假设指针变量p已经指向共有M行N列的数组A的首元素,则:
二维数组a[ ][ ]的有关指针
(注意:&a[i]和a[i]值虽然一样,但&a[i]或a+i指向行,而a[i]或 * (a+1)指向列)
三.指向数组首元素的
指针变量的运算
若指针变量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.
指针数组和数组指针的区别
指针数组:指针数组可以说成是“指针的数组”,首先这个变量是一个数组。
其次,“指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型。
在 32 位系统中,指针占四个字节
数组指针:数组指针可以说成是“数组的指针”,首先这个变量是一个指针。
指针数组的例题
//将若干字符串按字母顺序(由小到大)输出
#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
小课堂
南师大物科院
整理:何佳柠
排版:许嘉艺
审核:苏泳、陈司