首页 > 试题广场 >

test.c文件中包括如下语句文件中,定义的四个变量,哪个变

[单选题]
test.c文件中包括如下语句:
#define INT_PTR int*
typedef int*int_ptr;
INT_PTR a,b;
int_ptr c,d;
文件中定义的四个变量,哪个变量不是指针类型?
  • a
  • b
  • c
  • d
  • 都是指针
  • 都不是指针
推荐
B
#define为宏定义指令 int*为宏体是整型指针,INT_PTR为宏名;经过预处理,进行宏替换,INT_PTR a,b;替换为int* a,b;故a是整型指针而b是整型。
typedef作用是给已存在的数据类型引入一个别名,语法 typedef 已有类型名 类型别名,所以 int_ptr
是int*整型指针类型的别名。
编辑于 2015-01-19 21:59:15 回复(0)
这里除了注意宏定义是直接替换之外,int* a,b; b就是整形。如果要声明两个都是指针则是 int *a,*b;
发表于 2016-04-15 21:41:42 回复(0)
答案:B
宏定义在编译前会进行宏替换,INT_PTR a,b;被替换为int* a,b;所以a是指针,b是int型
typedef int* int_ptr;是类型定义,把int* 取别名为int_ptr,所以int_ptr c,d;定义的c,d变量都是整型指针
发表于 2015-01-17 13:25:31 回复(0)
#define INT_PTR int*
typedef int*int_ptr;
INT_PTR a,b;
int_ptr c,d;
选B;
typedef 给已有类型声明一个别名,故c和d都是int_ptr类型也即都是int *类型
#define宏定义,在预编译时直接进行简单替换,即原式变为:int* a,b; 这相当于是int *a, int b; 即a是指针,b是int型
1、宏定义时若宏体表达式没有括号约束,就应特别注意其替换后是否会出错;
#define  FUN(A,B)  A+B   
...
int tmp = FUN(2,3) * 4; // 本意是(2+3)*4,结果却变成了int tmp = 2+3*4; tmp变为14;故应改为#define FUN(A,B) (A+B)
2、关于把空格写在类型修饰符和变量名中间
int* p; // 合法但容易产生误导
误导即:int* 放在一起好像是这条语句中所有变量共同的类型一样。其实恰恰相反,基本类型是int 而非int*。 *仅仅是修饰了p而已,对该声明语句中其他变量,它并不产生任何作用。
int* p1, p2; // p1是指向int的指针,p2是int
涉及指针或引用的声明的两种写法,第一种是把修饰符和变量标识写在一起:
int *p1, *p2; // p1和p2都是指向int的指针
这种形式强调变量具有的复合类型
第二种把修饰符和类型名写在一起,并且记住每条语句只定义一个变量
int* p1; // p1是指向int的指针
int* p2; // p2是指向int的指针
这种形式着重强调本次声明定义了一种复合类型

发表于 2016-08-28 23:05:41 回复(2)
宏定义是替换,typedef是类型替换,表示所有变量的类型
发表于 2018-02-15 17:39:06 回复(0)
答案 B

INT_PTR a,b;
变成
int * a, b
所以b 是int类型
发表于 2015-01-13 16:35:50 回复(0)
b
typedef 定义了一种变量类型为int* 所以它所定义的变量都是该类型的。而define只是实现字符替换,INT_PTR a,b;就相当于 int* a,b; b为int型
发表于 2015-08-12 20:27:11 回复(0)
宏定义在预处理时候会直接替换,所以替换为int *a,b。这样b是一个int变量,而不是指针

#define为宏定义指令 int*为宏体是整型指针,INT_PTR为宏名;经过预处理,进行宏替换,INT_PTR a,b;替换为int* a,b;故a是整型指针而b是整型。
typedef作用是给已存在的数据类型引入一个别名,语法 typedef 已有类型名 类型别名,所以 int_ptr
是int*整型指针类型的别名

编辑于 2022-06-09 15:43:23 回复(0)
参考C++ Primer Plus(第6版)149页“类型别名”
发表于 2017-11-27 11:23:37 回复(0)
宏定义在编译前会进行宏替换,INT_PTR a,b;被替换为int* a,b;所以a是指针,b是int型
typedef int* int_ptr;是类型定义,把int* 取别名为int_ptr,所以int_ptr c,d;定义的c,d变量都是整型指针
发表于 2017-07-31 20:28:56 回复(0)
*的优先级高于int

发表于 2017-03-22 11:24:50 回复(0)
注意define与typedef的区别与联系。
int *a,b; 对于这种语句,a是指针变量,b是整形变量。
发表于 2016-05-18 17:20:30 回复(1)
忘了展开
发表于 2023-03-16 09:26:25 回复(0)
B
#define为宏定义指令 int*为宏体是整型指针,INT_PTR为宏名;经过预处理,进行宏替换,INT_PTR a,b;替换为int* a,b;故a是整型指针而b是整型。
typedef作用是给已存在的数据类型引入一个别名,语法 typedef 已有类型名 类型别名,所以 int_ptr
是int*整型指针类型的别名。

发表于 2022-10-23 18:13:55 回复(0)
注意typedef和#define的区别。
1.在连续几个变量的声明中,用typedef定义的类型能够保证声明中所有变量均为同一类型,而用#define定义的类型则无法保证。
正如本题,宏展开就是int *a, b;这就使得a是一个指向int的指针,b则是一个int。
编辑于 2022-06-28 20:59:17 回复(0)

#define 只是代码的替换(将thanks 强制换成thuuks)
typede则是数据类型的替换(起别名)
发表于 2020-02-21 00:36:03 回复(0)

宏定义是文本替换

发表于 2019-11-30 15:25:25 回复(0)
宏定义再编译以前完成替换。
发表于 2018-05-09 18:08:28 回复(0)
#define CHAR_PTR char*
typedef char* char_ptr;

int main()
{

	CHAR_PTR a, b;
	char_ptr c, d;
	char* e, f;

	cout << sizeof(a) << endl 
		<< sizeof(b) << endl 
		<< sizeof(c) << endl 
		<< sizeof(d) << endl
		<< sizeof(e) << endl
		<< sizeof(f) << endl;


	char ch2;
	ch2 = getchar();
}

输出414441
char* a, b;是一个指针,一个变量。#define同样的。
typedef因为是类型定义,类型直接就是指针类型,因此2个都是指针。
编辑于 2017-07-04 22:02:56 回复(0)
宏 没想到
发表于 2017-05-21 23:55:32 回复(0)
int * a,b; a是指针b是整形 int * a;int *b; 可以定义两个指针 A a,b; ab都是A类型。 那么为什么b不是指针呢? 宏只是简单的替换,typedef是"别名" 宏替换的例子 int x=2; #define n x*2+3 cout<<n*n; 2*2+3*2*2+3 =19 ps:总感觉哪里错了
发表于 2017-05-05 17:23:23 回复(0)