一
1·数组指针和指针数组
数组指针:指向数组的指针;下列指针指向了含10个int类型的数组。
int a[10]={0,1,2,3,4,5,6,7,8,9};
int (*p)[10]=&a;
利用指针输出数组指针的值。
for(i=0;i<10;i++){
printf("%d",*(*p+i));
*p+i是数组a的首地址,解引用之后才能得到在该位置上的地址。
而二维数组也是一样
int a[3][3]{{0,1,2},{3,4,5},{5,6,7}};
int i;
for(i=0;i<3;i++){
printf("%d",a[1});
}
这里的a[i]储存的是二维数组的地址,解引用之后得到地址上的值,所以数组指针可以用来表示二维数组中的值
int a[3][3]{{0,1,2},{3,4,5},{5,6,7}};
int (*p)[3]=a;
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d",*(*(p+i)+j));
}
}
2·指针数组:是一个存储着指针的数组。
int *p[10];
定义 int *p[10];。
如要将二维数组赋给一指针数组:
int *p[3];
int a[3][4]={{0,1,2,0},{1,2,3,0},{2,3,4,0}};
int i;
int j;
for(i=0;i<3;i++)
p[i]=a[i];
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d",*(*(p+i)+j));
}
}
这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]
所以要分别赋值。指针数组存放的是地址。所以可以用指针数组来表示二维数组。
二
结构体:把多个变量整合到一起。
struct a{
int b;
char c;
long d;
};
在定义之后 可以用这个结构体来定义变量,用结构成员运算符(.)来对其中每一个变量进行赋值或输出。
struct a{
int b;
char c
long d;
};
int main(){
struct a n;
n.b=1;
n.c='d';
n.d=5;
printf("%d %c %ld",n.b,n.c,n.d);
}
此外,可以用 typedef来给结构体重命名。
typedef struct c{
char a;
int b;
doublec;
}t;
此时,struct a被重命名为t;
我们也可以把结构体作为形参传进函数。