typedef的学习 数组指针与指针数组的差异
2017-09-04 19:56
309 查看
有时候我们会对一些数据类型,根据他的功能来对其命名。我们可以利用 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)
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)
相关文章推荐
- 指针,函数,数组打杂混学习以及typedef学习笔记
- C语言学习笔记19——数组指针和指针数组分析
- [C++ 学习] C++ Primer 习题 4.36 指针数组 & 数组指针
- C语言学习笔记.指针4--数组指针和指向数组的指针变量(一)
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- 【C++学习】指针数组,数组指针,以及函数指针,以及堆中的分配规则--有是一篇好文章,收到自己门下 慢慢学习
- typedef,后加指针,数组等
- 数组指针和指针数组的区别
- C指针 --- 指针数组 数组指针
- c语言学习之数组指针
- 【C语言基础】对指针数组,数组指针,函数指针, 函数指针数组,指向函数指针数组的指针的理解
- 数组指针和指针数组的区别
- C++中的指针、数组指针与指针数组、函数指针与指针函数
- 黑马程序员——零基础学习iOS开发——06 字符串、指针、指针和数组、指针和字符串、指针和函数
- C++学习第7篇-数组和指针
- C++ Primer复习和学习笔记 第四章 数组和指针
- 指针数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针
- 【C Prime Plus】学习笔记,Chapter 10,数组和指针之五
- 指针与数组_数组指针
- 数组指针和指针数组的区别(转)