我们先来看一条基本类型的声明语句:int a, b, ...

即一条声明语句由一个数据类型(int)和紧随其后的一个变量名列表(a, b, ...)组成

更通用的描述是:一个基本数据类型和紧随其后的一个声明符列表组成,每个声明符命名了一个变量并指定该变量是与该基本数据类型有关的某种类型。

例如:上面的声明语句中,声明符其实就是变量名,变量的类型也就是声明的基本数据类型。这只说明这个声明符是简单的,我们下面介绍更复杂的声明符,它基于基本数据类型得到更复杂的类型(如指针、引用等),并把它指定给变量。

我们来看这么一条定义语句:int i = 10, *p = &i, &r = i;

上面这条定义语句中包含类型修饰符“*”、“&”,我们往往迷惑于基本数据类型和类型修饰符的关系,但必须要知道的是类型修饰符只是声明符的一部分罢了。

再来看这么一条声明语句:int *p1, *p2;

我们往往称“*”为类型修饰符,而将“p1”称为变量标识符,声明符就是类型修饰符和变量标识符的组合“*p1”。

这种形式着重强调变量具有复合类型

还有一种声明的方法:int* p1, p2;

我们本打算定义两个指针变量p1和p2,但结果却是只定义了一个指针变量p1,变量p2则是int型变量。

之所以会产生这样的错误,是因为我们误以为类型修饰符“*”作用于本次定义的全部变量,int*放在一起好像是这条声明语句中所有变量共同的类型一样。其实,基本数据类型是int而非int*,“*”仅仅是修饰了p1而已,对该声明语句中的其他变量并不产生任何作用。

如果我们硬是要让基本数据类型和类型修饰符放在一起,可以每条声明语句只定义一个变量:

	int* p1;
int* p2;

这种形式着重强调本次声明定义了一种复合类型

【补充】

这样的声明语句等价于上面的声明语句:int* p1, *p2;        //不觉得难看??

结论:题目中的两种方法都可以,但推荐使用声明符的方法!

复合类型的声明——是int *p还是int* p的更多相关文章

  1. 变量和基本类型——复合类型,const限定符,处理类型

    一.复合类型 复合类型是指基于其他类型定义的类型.C++语言有几种复合类型,包括引用和指针. 1.引用 引用并非对象,它只是为一个已存在的对象所起的另外一个名字. 除了以下2种情况,其他所有引用的类型 ...

  2. C语言中的复合类型

    复合类型 一.掌握的类型 1. 指针数组 int * arr[10]; //arr是一个数组,有10个元素,每个元素都是一个指针,即arr是一个指针数组 int a,b,c,d; arr[0] = & ...

  3. 学习C++.Primer.Plus 4 复合类型

    本章介绍的有复合类型有: 数组. 字符串. 结构. 共用体. 指针 数组: 声明数组时数组长度必须为常量(或const). 只有初始化时可以用“=”,其它时候均不可以给数组直接赋值,除了赋值的元素以外 ...

  4. c++学习总结--复合类型,const。

    复习c++,有必要对一些东西做一下笔记,方便以后学习,如有问题,欢迎提出. 首先,最常用两种复合类型应该是引用和指针. 所谓复合类型,是在基本类型基础(如:int)上定义的类型. 引用是c++的一个复 ...

  5. go - 复合类型 array, slice, map

    Go 语言支持复合类型: 数组:array 切片:slice 指针:pointer 字典:map 通道:chan 结构体:struct 接口:interface 1. array   同一类型数据的集 ...

  6. c++中的复合类型

    复合类型是指基于其他类型而定义的类型. 而这里介绍的是引用和指针.并且指针和引用都提供了对其他对象的间接访问. 引用 引用还是很好理解的,就是为对象起了另外一个名字,引用类型引用另外一种类型. 通常将 ...

  7. WebService之Axis2(2):复合类型数据的传递

    在实际的应用中,不仅需要使用WebService来传递简单类型的数据,有时也需要传递更复杂的数据,这些数据可以被称为复合类型的数据.数组与类(接口)是比较常用的复合类型.在Axis2中可以直接使用将W ...

  8. 《C++ Primer Plus》读书笔记之二—复合类型

    二.第四章 复合类型  1.C-风格字符串:C-风格字符串具有一种特殊的性质:以空字符结尾,空字符被写成\0,其ASC||编码为0,用来标记字符串的结尾.例如: char dog[5]={'b','e ...

  9. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

随机推荐

  1. Android手机上抓包神器

    Packet Capture 一款依托安卓系统自身VPN来达到免Root抓取数据包的应用程序.Packet Capture一个使用SSL网络解密的 捕获数据包/网络嗅探 工具,虽然它的功能并不丰富,但 ...

  2. span没有name属性

    <span id="test" name="测试数据">测试咯</span> 在eclipse中这么写发现会有警告提示.百度发现原来sp ...

  3. Mongodb在window上启动

    MongoDB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.这里主要讲如何在windows平台下安装MongoDB. 安装最新版本mon ...

  4. java HtmlEmail发送邮件工具类

    package com.sh.xrsite.common.utils; import java.io.File; import java.util.HashMap; import java.util. ...

  5. poj_3256_Cow Picnic

    The cows are having a picnic! Each of Farmer John's K (1 ≤ K ≤ 100) cows is grazing in one of N (1 ≤ ...

  6. 通过xshell在linux上安装redis3.0.0

    通过xshell在linux上安装redis3.0.0 0)首先要安装环境:yum install gcc-c++ 1)通过xftp6将redis安装包上传到linux:解压缩:tar -xvfz r ...

  7. chrome浏览器中 F12 功能的简单介绍

    chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...

  8. 分布式网上商城项目-dubbo搭建与初次使用错误

    1.Spring-service启动失败 严重: Exception sending context initialized event to listener instance of class o ...

  9. 利用python和opencv批量去掉图片黑边

    import os import cv2 import numpy as np from scipy.stats import mode import time import concurrent.f ...

  10. Linux运维一定要知道的六类好习惯和23个教训,避免入坑!

    Linux运维一定要知道的六类好习惯和23个教训,避免入坑! 从事运维三年半,遇到过各式各样的问题,数据丢失,网站挂马,误删数据库文件,黑客攻击等各类问题. 今天简单整理一下,分享给各位小伙伴. 一. ...