typedef的学习 数组指针与指针数组的差异

来源:互联网 发布:手机淘宝联盟几号提现 编辑:程序博客网 时间:2024/06/09 16:32

有时候我们会对一些数据类型,根据他的功能来对其命名。我们可以利用 typedef这个函数

typedef的数据类型:

typedef OLD NAME(NEW NAME)

下面举几个例子:

1 利用typedef替换整数类型

typedef int INTGER

INTGER a,b

a=5;

从上的例子可以看书,当用INTGER代替int 以后我们可以用INTGER对变量a,b进行定义

2 利用typedef替换数组类型

typedef char(ARRY20)[20]

ARRY20 a1,a2,a3

从上面的例子可以看到,ARRY20是char[20]数组的别名,注意了别用要紧跟类型后面,所以别名要在数组的长度前面

3 利用typedef替换指针类型

第一种

typedef int*(*PTR_TO_ARR)[4]

*PTR_TO_ARR a1,a2,a3

第二种

typedef int(*PTR_TO_FUNC)(int,int) 

(为指针函数更改名字)


举个例子:

typedef int(*PTR_TO_FUNC)(int,int)

int max(int a,int b)

{

        return   a>b?a:b;

}

int main()

{

 PTR_TO_FUNC punc=max;//这行代码是在punc函数指针定义的时候直接将max函数的地址赋值给punc

......................}

下面讲下: typedef与#define 宏定义的不同

#define int* PTR_INT

PTR_INT a,b

注意了此时,第二句等同于 int*a ,int b ,a,b是不同的类型

typedef int* PTR_INT

PTR_INT a,b,c;

用了typedef后a,b,c均是常数型指针变量


指针数组与数组指针的区别、

先讲下优先级: ()>[ ]> *

形式的区别:

 int *a[3] 表示  这一维数组步长为3 ,这个数组中存放的是指针变量

举个例子

int main()

{

  int*a[3];

  int p[3]

 a++;//a即为这个数组的首地址下移一位,地址到了 *a[1]

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

{

  a[i]=p[i]}

int (*a)[3]

这是表示 指针int*a 指向了一个长度为3的数组  *(a+i)可以便利 数组中的元素  也可以  int a[3]; p=a;将数组的首地址赋值给p指针

这是指针数组 与数组指针在内存方面的差异

顺便讲下 用指针表示二维数组的方式

 int *(p)[3][4]

可以有如下这样的方式:

*(*(p+i)+j)