首页 > 试题广场 >

在64位系统下,分别定义如下两个变量:char *p[10]

[单选题]
在64位系统下,分别定义如下两个变量:char *p[10]; char(*p1)[10];请问,sizeof(p)和sizeof (p1)分别值为____。
  • 4,40
  • 80,8
  • 10,10
  • 8,80
  • 40,4
  • 4,4
重点理解p跟谁结合了,跟[]结合,则p就是一个数组;跟*结合,p就是一个指针;
首先[]()的优先级一样,均大于*
char *p[10],p与[]结合,所以p就是一个数组,数组的元素比较特殊,是指针,指针大小为8,所以是10*8=80;
char(*p1)[10],与*结合,所以是一个指针,大小为8
发表于 2015-08-20 20:45:24 回复(4)
char *p[10] 是指针数组,数组里存放了10个指针,在64位系统下指针占8个字节,所以sizeof(p) = 10 * 8 = 80.
char (*p1)[10]是数组指针,p1是一个指向存放10个char类型的数组的指针,所以sizeof(p1) = 8.
发表于 2015-04-14 10:20:57 回复(6)
看这里
发表于 2015-04-13 16:27:41 回复(4)
LY.头像 LY.
64位系统 指针占八个字节,32位占4个字节
发表于 2015-07-18 15:13:00 回复(2)
char *p[10],先找到声明符p,然后向右看,有[]说明p是个数组,再向左看,是char *,说明数组中的每个元素是char *。所以这是一个存放char指针的数组。在64位系统中指针占8个字节,所以sizeof(p)=10*8=80。
char(*p1)[10],先找到声明符p1,被括号括着,先看括号内的(优先级高),然后向右看,右边没有东西,向左看,是*,说明p1是个指针,什么指针?再看括号外面的,先向右看,有[] 是个数组,说明p1是个指向数组的指针,再向左看,是char,说明数组的每个元素是char。所以,这是一个指向存放10个char的数组的指针。所以sizeof(p1)=8。
发表于 2016-07-08 09:20:43 回复(0)
我擦,64位,做了半个月32位,一下***了🤣🤣🤣
发表于 2019-08-19 19:42:28 回复(0)
B 64位系统指针为8字节 p是一个有10元素的数组,数组中的元素为指向char型的指针,所以10*8=80 p1是一个指针,8字节
发表于 2015-04-10 00:33:36 回复(0)
考点: 指针数组和数组指针 以及 [] 与 *的优先级
[] 是比 * 优先级高的
char *p[10];    
// p[10], p 是数组,维度为10;
// *(p[10]), 数组的内容为指针; 
//char *p[10] 该指针数组里的指针指向char类型的对象
char (*p1)[10];
// *p1 p1为指针
// (*p1)[10], 他指向一个数组
//char (*p1)[10] 该数组为char类型数组
char a[10]={'a'};
p1 = &a;
cout <<(*p1)[0]<<endl; // 'a'
发表于 2016-07-15 15:46:04 回复(0)
1. 当sizeof用于数组名时,得到的字节数为整个数组所占的大小;
2. 当sizeof用于指针变量时,得到的长度与机器指令长度有关。(32位机器为4B,64位机器为8B)。
char *p[10];   /* p是一个指针数组 */
char(*p1)[10];  /* p1是一个指向“包含10个char变量的数组”的数组指针 */

发表于 2015-08-13 23:45:41 回复(1)
B 64位系统指针为8字节 ,所以10*8=80   p1是一个指针,8字节
发表于 2015-04-10 10:04:34 回复(0)
  • 指针类型占用的内存大小是固定的(无论该指针指向哪种数据类型),在 32 位系统中为 4 字节;在 64 位系统中为 8 字节;
发表于 2021-09-17 20:18:08 回复(0)
()和[]的优先级一样,大于*,所以char *p[10]p仍是一个数组名,且数组元素是指针,64位系统中,一个指针大小是8个字节,10个元素就是80字节的大小。
发表于 2021-07-24 22:01:21 回复(0)
64位操作系统。。。出题的有点狠
发表于 2020-03-20 11:20:32 回复(0)

p和[]结合就是数组,和*结合就是指针

还有一点额外话需要注意下:如果把第一个p传递给某个函数,在函数中再调用sizeof的话,结果为4,这是因为不能把整个数组作为参数传递给函数,此时实际上传递的是一个指针

编辑于 2018-11-20 08:44:09 回复(0)
char *p[]和char (*p)[] 需要讲两点 1.指针数组和数组指针,两个词组的后半部分是主体,说明这是一个指针还是数组。好,我们来看第一个,从左到右结合,就是存放char*的数据类型的数组p。第二个,先用括号直接括住*p这是一个整体,那么从左到右,就是指向存放char数据类型数组的指针p。 2.32位下,指针类型是4字节,所以64位就是8啊! 指针数组,实际占用内存是10个元素的大小,所以10×8 数组指针,它是指针啊,所以8
发表于 2018-05-13 12:10:48 回复(0)
发表于 2015-08-23 00:25:06 回复(0)
是64位系统,不是32位
发表于 2015-07-14 17:02:37 回复(0)

在64位系统下,分别定义如下两个变量:char *p[10]; char(*p1)[10];

  • sizeof(p):数组 p 包含 10 个 char* 类型的指针,因此在 64 位系统下,每个指针占据 8 字节,所以 sizeof(p) 的值为 10 * 8 = 80 字节。
  • sizeof(p1):p1 是一个指向包含 10 个 char 类型元素的数组的指针,因此在 64 位系统下,一个指针占据 8 字节,所以 sizeof(p1) 的值为 8 字节。
发表于 2023-11-14 15:38:26 回复(0)

char *p[10] 是指针数组,数组里存放了10个指针,在64位系统下指针占8个字节,所以sizeof(p) = 10 * 8 = 80.
char (*p1)[10]是数组指针,p1是一个指向存放10个char类型的数组的指针,所以sizeof(p1) = 8.
发表于 2023-03-30 10:46:05 回复(0)
指针数组和数组指针
发表于 2023-03-08 17:10:02 回复(0)