赞
踩
行指针 是一个指针, 指向的元素是一维数组。
存储行地址的指针变量,叫做行指针变量。形式如下:
存储类型 数据类型 (*指针变量名)[表达式:列数] ;
例如,int a[2][4];
int (*p)[4];
eg:
int a[3][3] = {1,2,3,
4,5,6,
7,8,9};
int (*p)[3] = &a[0];
int (*p)[3] = a;
int (*p)[3] = &a[1];
int a[3][3] = {1,2,3,
4,5,6,
7,8,9};
int (*p)[3] = a; // int (*p)[3] = &a[0];
p[1][2] == (*(p + 1))[2] == *(*(p + 1) + 2)
遍历二维数组:
int a[3][4] = {1,2,3,4,
5,6,7,8,
9,10,11,12};
int (*p)[4] = a; // int (*p)[4] = &a[0];
int i,j;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
printf("%d\t", p[i][j]); //*(*(p + i) + j) (*(p + i))[j]
}
puts("");
}
int a[5] = {1,2,3,4,5};
int (*p)[5] = &a;
int i;
for(i = 0; i < 5; i++)
{
printf("%d\n", (*p)[i]); *((*p) + i) p[0][i]
}
p[0][i] == (*(p+0))[i] == *(*(p + 0) + i)
所谓指针数组是指由若干个具有相同存储类型和数据类型的指针变量构成的集合。
是一个数组,元素是一个一个的指针。
指针变量数组的一般说明形式:
存储类型 数据类型 *指针变量数组名[大小];
int *a[3];
//指针数组名就表示该指针数组的存储首地址,即指针数组名为数组的指针。
1.初始化
int a = 10, b = 20, c = 30;
int *p[3] = {&a, &b, &c};
printf("%d\n", *p[0]);
2.赋值
int a = 10, b = 20, c = 30;
int *p[3];
p[0] = &a;
p[1] = &b;
p[2] = &c;
int d = 100;
p[2] = &d;
1.野指针: 指针指向不明确,被称为野指针。 野指针一旦使用就段错误。
int *p;
2.空指针: 指针指向 NULL (零地址)。 空指针一旦使用就段错误。
int *p = NULL;
3.空类型指针(万能指针):可以指向任意类型的地址
void *p;
注意:万能指针使用前必须强制转换为对应数据类型的指针
eg:
int a = 10;
void *p = &a;
printf("%d\n", (int *)p);
4.二级指针/多级指针
指向指针的指针就是二级指针
int a = 10;
int *p = &a;
int **p = &p;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。