2010-09-28 102 views
0

假设,sizeof(int)和sizeof(int *)之间的区别是什么?此语句是否为int * numbers [] = {....}是否正确?

int numbers [20]; 
int * p; 

我觉得这是语句有效

p = numbers; 

但由于numbers是一个数组,作为一个常量指针操作,这不是

numbers = p; 

,我们不能将值分配给常量。所以如果我们这样做,那么在初始化数组时,我们不能使用*numbers

+1

我不明白“在初始化数组时使用*数字”。 – 2010-09-28 09:40:21

+0

http://www.catb.org/esr/faqs/smart-questions.html – sellibitze 2010-09-28 09:43:41

+0

问题的标题与问题的主题不符。请尽量在将来更加精确,以便更容易回答,并且对于那些怀有同样疑虑的其他人,可以找到解决方案。 – Francesco 2010-09-28 11:01:10

回答

3

INT编号[20]; int * p;

我认为这是声明是有效的

p = numbers;

但这不是

数= P;

因为数字是一个数组,所以它是一个常量指针,我们不能将值赋给常量。

numbers不是一个常量指针,它是一个不可修改的lvalue所以你不能指定它。

sizeof(int)返回一个整数的尺寸上的任何特定的实施

sizeof(int*)一个指针的大小返回到一个整数。

sizeof()返回类型是size_t(无符号)

1

sizeof(int)返回用于存储一个int

sizeof(int*)返回用于存储指针

字节数要声明的初始化可以使用以下语法整数的常数阵列的字节数:

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

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

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

-1

在简单的话

int numbers [20];是一个整数阵列

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

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

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

+0

我想你的意思是'数字[0] = * p' – Necrolis 2010-09-28 09:59:00

+0

@Necrolis我不好,谢谢你指出 – Alam 2010-09-28 10:24:19

+0

和数字不是整数,它是一个20整数的数组。 – kriss 2010-09-28 10:41:14

相关问题