c语言,定义多个指针的写法,多个指针的声明
2017-10-13 14:28
363 查看
先说明正确的多个指针声明应该为:例:int *a,*b,*c,*d;
按照常理定义变量应该为:类型 变量名 如:int a;
但是定义指针时,int *a;依照 类型 变量名 的规则来看,就像定义了一个int型的,名字为“*a”的变量,但是实际上我们声明的变量为int*型的变量a。
那我们可以这样int* a;这样看起来类型就是int*了,变量为a,但是当我们int* a,b;时,看起来就是定义了两个int*型的指针,实际上是定义了一个int*型的变量a和一个int型的b。
有人说可以这样理解,int *a;可以把(*a)看成一个整体也就是(*a)当作int类型变量,a为int*型指针,这样解释可以,但是遇到比如数组指针 char (*p)[3];或者函数指针int (*p)(int a,int b);时,这么解释也说不过去。
那有的人说为何不整成int_ptr,char_ptr来定义各种类型变量的指针,如果这样就意味着没有“*”这种方式定义指针了,那二级指针还得整个int_ptr_ptr,char_ptr_ptr,那得多少关键字呀!!,自己定义结构体还得相应用编译器生成定义结构体指针的类型名,明显是不科学的,这种关键字加运算符的声明方式,明显很科学。
因此要在一条语句中声明多个变量,必须在每个变量前面加上“*”。
按照常理定义变量应该为:类型 变量名 如:int a;
但是定义指针时,int *a;依照 类型 变量名 的规则来看,就像定义了一个int型的,名字为“*a”的变量,但是实际上我们声明的变量为int*型的变量a。
那我们可以这样int* a;这样看起来类型就是int*了,变量为a,但是当我们int* a,b;时,看起来就是定义了两个int*型的指针,实际上是定义了一个int*型的变量a和一个int型的b。
有人说可以这样理解,int *a;可以把(*a)看成一个整体也就是(*a)当作int类型变量,a为int*型指针,这样解释可以,但是遇到比如数组指针 char (*p)[3];或者函数指针int (*p)(int a,int b);时,这么解释也说不过去。
那有的人说为何不整成int_ptr,char_ptr来定义各种类型变量的指针,如果这样就意味着没有“*”这种方式定义指针了,那二级指针还得整个int_ptr_ptr,char_ptr_ptr,那得多少关键字呀!!,自己定义结构体还得相应用编译器生成定义结构体指针的类型名,明显是不科学的,这种关键字加运算符的声明方式,明显很科学。
因此要在一条语句中声明多个变量,必须在每个变量前面加上“*”。
相关文章推荐
- C语言:返回指针的函数,函数声明、定义和调用,嵌套调用
- C语言指针详解----指针声明定义赋值
- C语言中指针声明的两种写法
- C语言--定义为数组,声明为指针&定义为指针,声明为数组
- c语言复习笔记--指针定义
- 定义为指针,外部声明为数组和定义为数组,外部声明为指针,会发生什么?
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- C语言中,即使参数声明为数组,它仍然是个指针
- C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?
- C语言中定义和声明的一些差别
- C语言、C++中声明和定义的区别
- C语言中声明及定义的区别:【C专家编程】
- C语言中变量的定义和声明
- C语言中定义和声明
- C语言中 各种指针定义到对比 联想2014秋笔试题目
- C语言关于指针的定义及使用
- C语言中 声明 vs 定义
- C/C++_log2000_函数声明与指针定义等零散知识点随手笔记
- 从变量的声明和定义看指针与const
- C语言在函数名与函数体之间定义变量--K&r C和ANSI C两种风格的函数声明和定义