C中的标量类型和聚合类型有什么区别?

时间:2016-03-01 12:09:03

标签: c types

我读过一本名为Pointers On C的书,在那本书中,有一种叫做标量类型的类型。
我知道算术类型和指针类型统称为标量类型,但我想知道标量类型和聚合类型之间的区别以及使用它们的场合是什么?

4 个答案:

答案 0 :(得分:8)

C11-§6.2.5类型(第21页):

  

算术类型和指针类型统称为标量类型。数组和结构类型统称为聚合类型 46)

标量数据类型只能包含单个数据项,而聚合类型可以包含多个数据项。

int a;             //Scalar Type
char c;            //Scalar Type
float *p;          //Scalar Type
char str[10];      //Aggregate Type
struct s{
    int a;
    float b[5];
} ss;              //Aggregate Type

46)请注意,聚合类型不包含联合类型,因为具有联合类型的对象一次只能包含一个成员。

答案 1 :(得分:1)

由于词聚合本身意味着聚合类型由其他类型组成。

在C聚合类型中是数组和结构类型。

考虑到聚合类型可以包含其他聚合类型。

以下是聚合类型的示例

#include <stdio.h>

int main( void ) 
{
    struct TLine
    {
        struct TPoint
        {
            int x;
            int y;
        } first, second;
    } lines[10] = { [0] = { { 0, 0 }, { 10, 10 } } };

    printf( "lines[%d].first = { %d, %d }, lines[%d].second = { %d, %d }\n", 
            0, lines[0].first.x, lines[0].first.y, 
            0, lines[0].second.x, lines[0].second.y );
}    

程序输出

lines[0].first = { 0, 0 }, lines[0].second = { 10, 10 }

结构TLine是一种聚合类型,包含另一个聚合类型定义struct TPoint。并且lines是一个更多的aggrefation类型的对象 - TLines数组。

答案 2 :(得分:0)

互联网可以成为你的朋友!但是,标量类型是一种类型,其值存在一个算术(整数,浮点数,指针),而聚合类型只是值为元组元组的类型,即值的集合,结构,并且没有自然算术(例如:由姓名和年龄描述的人,你不能增加或增加两个人......)。

答案 3 :(得分:0)

取自here

C Scalar

  

“C标量数据类型”列出了C标量数据类型,提供了它们的大小和格式。标量数据类型的对齐方式等于其大小。 “标量对齐”显示标量对齐,这些对齐适用于单个标量以及作为数组元素或结构或联合成员的标量。支持宽字符(以L为前缀的字符常量)。每个宽字符的大小为4个字节。

C聚合数据类型

  

聚合数据类型由一个或多个标量数据类型组成。您可以声明以下聚合数据类型:

     
      
  • 阵列

  •   
  • 联盟

  •   
  • STRUCT

  •   

这只是一个简短的定义,但我给出的链接有很多内容。

为了更清楚,这是一个流程图:

enter image description here

这是一个更详细的流程图:

enter image description here