指针数组和数组指针

1 int matrix[3][3];
2 int* pm=matrix;

数组类型:由数组元素的类型和数组的大小共同决定。

int array[5];数组类型为:int[5] 表示5个连续的int类型空间

定义数组类型:

typedef type(name)[size]

1 typedef int(INT5)[5];
2 INT5 array 等价于 int array[5]

数组指针:

1、可以通过数组类型定义数组指针:

1 int a[5];
2 int* p=&a;

再次强调:

这里的a与&a虽然值相等,但是意义不同,a表示连续空间的第一个元素空间的地址;&a表示连续空间的地址,他们的区别体现在指针运算中:a+1与&a+1。

*(p+1)=a[1]

2、直接定义:

int (*p)[5];
 1 #include <stdio.h>
 2 
 3 typedef int(AINT5)[5];
 4 typedef float(AFLOAT10)[10];
 5 typedef char(ACHAR9)[9];
 6 
 7 int main()
 8 {
 9     AINT5 a1;
10     float fArray[10];
11     AFLOAT10* pf = &fArray; //定义了数组指针:pf,指针类型:float* 。它指向float[10]类型数组,并初始化
12     ACHAR9 cArray;
13     char(*pc)[9] = &cArray; //定义了数组指针:pc,指针类型:char* 。它指向int[9]类型数组,并初始化
14     char(*pcw)[4] = cArray; //定义了数组指针:pcw,指针类型:char* 。它指向char[4]类型数组,并初始化
15     
16     int i = 0;
17     
18     printf("%d, %d
", sizeof(AINT5), sizeof(a1)); //5*4
19     
20     for(i=0; i<10; i++)
21     {
22         (*pf)[i] = i; //(*pf)[1]=1:表示fArray[1]=1
23     }
24     
25     for(i=0; i<10; i++)
26     {
27         printf("%f
", fArray[i]);
28     }
29     
30     printf("%0X, %0X, %0X
", &cArray, pc+1, pcw+1);
31 }

指针数组:

指针数组中每个元素为一个指针:

float* a[3];表示定义了float*类型的三个指针变量

内在的趣味,表面的繁琐
原文地址:https://www.cnblogs.com/data1213/p/4826336.html