sizeof(int)和sizeof(int *)有什么区别?这个语句int * numbers [] = {....}是否正确?

时间:2010-09-28 09:35:51

标签: c++ arrays pointers sizeof

假设,

int numbers [20];
int * p;

我认为这是陈述有效

p = numbers;

但这不是

numbers = p;

因为numbers是一个数组,作为一个常量指针运行,我们不能为常量赋值。因此,如果我们这样做,那么在初始化数组时我们不能使用*numbers

4 个答案:

答案 0 :(得分:3)

  

int numbers [20]; int * p;

     

我认为这是陈述有效

     

p =数字;

  

但这不是

     

numbers = p;

     

因为数字是一个数组,作为常量指针运行,我们不能将值赋给常量。

numbers不是常量指针,它是不可修改的lvalue,因此您无法分配它。

sizeof(int)返回任何特定实现的整数大小

sizeof(int*)返回指向整数的指针的大小。

sizeof()的返回类型为size_t(无符号)

答案 1 :(得分:1)

sizeof(int)返回用于存储int

的字节数

sizeof(int*)返回用于存储指针的字节数

要初始化一个常量的int数组,可以使用以下语法:

int numbers[] = { 0, 1, 2, 3 };

答案 2 :(得分:1)

sizeof(int)是数据类型的大小,sizeof(int*)是指向数据类型的指针的大小。

你不能将p分配给数字,因为数字被声明为基于int数组的固定长度堆栈,它不是一个int指针(尽管它可以转换为一个)

答案 3 :(得分:-1)

简单来说就是

int numbers [20];是一个整数数组

int * p;是指向整数的指针; p存储它指向的地址

numbers = p;是不可能的;两者都是不同的类型,一个是int,另一个是int *

然而numbers[0] = *p;是可能的;在某个有效地址提供了p点