int *
是否是派生数据类型?
我感到困惑是因为我觉得这两种情况在这个问题上是相互矛盾的。
案例1:
假设:将int *
视为派生数据类型。然后考虑下面给定的代码-
void someRandomFunction()
{
int* a, b, c, d;
int e, f, g, h;
....
....
....
}
在这个函数中,如果我们需要考虑int *
作为一个派生数据类型,那么就像e, f, g, h
是int
数据类型的变量一样,a, b, c, d
的所有变量都必须是指向int
数据类型的指针,对吗?
但是因为只有a
是一个指向int
数据类型的指针,所以这个反驳了我们的假设这种情况?
案例2:假设:int *
isnot被视为派生数据类型。然后考虑下面给定的代码-
int* MyFunc()
{
int *p;
....
....
....
return p;
}
这里,int *
指示return's datatype
给编译器,对吗?那么,这是否证明int *
是一个派生数据类型,也就是说,这个是否反驳了我们的假设这种情况?
int *是否是派生数据类型?
是对象类型int
的派生类型。
如果我们需要考虑int *作为派生数据类型,那么就像e一样,F g h是int数据类型的变量,所有的变量ab c d必须是指向int数据类型的指针,对吧?
如果您将引入类型int *
作为类型说明符,例如
typedef int * T;
那么在这个声明中
T a, b, c, d;
所有声明的变量类型都是int *
。否则,符号*
与此声明中变量a
的声明符相关
int* a, b, c, d;
可以重写为
int ( * a ), b, c, d;
注意声明是这样定义的(这里是声明的部分定义):
declaration:
declaration-specifiers init-declarator-listopt ;
declaration-specifiers:
type-qualifier declaration-specifiersopt
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
int* a, b, c, d;
所有声明器的通用类型说明符是int
,声明器a
的形式是*a
。
而在此声明
T a, b, c, d;
通用类型说明符是T
,表示派生的指针类型int *
。
即从引用类型int
构建的派生指针类型int *。派生类型int **
是从其引用类型int *
构建的,以此类推。
例如,在C语言中通过引用传递意味着通过引用原始对象类型的派生指针类型的另一个对象间接传递对象。
好的。我们有一个基本数据类型(int, float, double,…),我们有一个派生类型数据类型和我们也有派生数据类型(基本数据类型带有一些)扩展).
在你的第一个例子int* a, b, c, d;
中,我们有一个a
作为指向整数的指针但是b, c, d
不是指向整数的指针,因为它们只是整数
!所以,是的,你是对的!int*
是从int类型派生出来的。你的困惑已经开始采取b,c,d
也作为一个指针,但他们不是。在C编程语言的变量声明过程中如果有一个*
在变量名和她的数据类型之间,该变量是指向她的指针数据类型。
派生数据类型是从基本数据类型派生的数据类型。在本例中,int *
是int
的派生数据类型。
你的第一个分析是错误的。让b, c, d
具有int
数据类型并不是说int *
不是派生数据类型。这是关于C是如何工作的。这就是为什么像这样写声明总是一个好主意:int *a, ....
,这样*
就与变量相邻,而不是表明任何到来的变量不采用*
而只采用数据类型的类型。
和数组一样
int a[10], b;
这里数组是一个派生数据类型,但b
有类型,int
也没有暗示数组不是派生数据类型。
数组、结构体、联合、函数、指针和原子类型都是从其他类型派生的。
int* a, b;
不是表示b
是指针类型的一种方式。声明的语法是这样的:*
与a
绑定;该声明实际上是int *a, b;
,就好像它是int *a; int b;
。
在C语言中,声明使用基本类型,如int
,然后通过使用如何使用该类型的"图片"来描述派生类型。在int *a;
中,我们说*a
将被用作int
。由此可以推断,a
一定是指向int
的指针。同样,int *a[3]
说*a[i]
将用作int
,因此a[i]
必须是指向int
的指针,因此a
必须是指向int
的指针数组。
然后int *a, b;
说*a
是int
,b
是int
。