Redian新闻
>
只有吃一样东西,中国才和美国的质量是一样的 (转载)
avatar
只有吃一样东西,中国才和美国的质量是一样的 (转载)# Joke - 肚皮舞运动
c*e
1
Is the answer sizeof(arr)/sizeof(int) if an integer array?
avatar
g*0
2
【 以下文字转载自 Returnee 讨论区 】
发信人: biology622 (biology622), 信区: Returnee
标 题: 只有吃一样东西,中国才和美国的质量是一样的
发信站: BBS 未名空间站 (Sun Jan 8 16:11:35 2012, 美东)
大便!
中美大便的成分很接近,毒性差不多。 除此之外,中国的啥东西都比美国差
avatar
C*O
3
对 。。。
不过
func(int* arr)
{
sizeof(arr)/sizeof(int) 返回是1,
}

【在 c**********e 的大作中提到】
: Is the answer sizeof(arr)/sizeof(int) if an integer array?
avatar
b*e
4
看来这位是吃得不少

【在 g********0 的大作中提到】
: 【 以下文字转载自 Returnee 讨论区 】
: 发信人: biology622 (biology622), 信区: Returnee
: 标 题: 只有吃一样东西,中国才和美国的质量是一样的
: 发信站: BBS 未名空间站 (Sun Jan 8 16:11:35 2012, 美东)
: 大便!
: 中美大便的成分很接近,毒性差不多。 除此之外,中国的啥东西都比美国差

avatar
c*e
5
It only works on array on stack? I got 1 regardless I use new or malloc for
array on heap.

【在 C*O 的大作中提到】
: 对 。。。
: 不过
: func(int* arr)
: {
: sizeof(arr)/sizeof(int) 返回是1,
: }

avatar
T*n
6
呵呵

【在 b*****e 的大作中提到】
: 看来这位是吃得不少
avatar
C*O
7
其实也有道理
因为这些返回 都当做 int*了
int a[4], 也不知道怎么操作的 可以返回 size length

for

【在 c**********e 的大作中提到】
: It only works on array on stack? I got 1 regardless I use new or malloc for
: array on heap.

avatar
u*n
8


【在 b*****e 的大作中提到】
: 看来这位是吃得不少
avatar
c*e
9
It seems there is no way to find the size of array on heap.
avatar
r*e
10
看来搞生物的,真是名不虚传

【在 g********0 的大作中提到】
: 【 以下文字转载自 Returnee 讨论区 】
: 发信人: biology622 (biology622), 信区: Returnee
: 标 题: 只有吃一样东西,中国才和美国的质量是一样的
: 发信站: BBS 未名空间站 (Sun Jan 8 16:11:35 2012, 美东)
: 大便!
: 中美大便的成分很接近,毒性差不多。 除此之外,中国的啥东西都比美国差

avatar
C*O
11
你关心的问题是无意义的

【在 c**********e 的大作中提到】
: It seems there is no way to find the size of array on heap.
avatar
l*a
12
maybe this is your onsite question on tomorrow

【在 C*O 的大作中提到】
: 你关心的问题是无意义的
avatar
C*O
13
不可能 他们用c#,更关心OOD

【在 l*****a 的大作中提到】
: maybe this is your onsite question on tomorrow
avatar
c*e
14
You are probably right. I care them only because they are given in others'
interview experience.

【在 C*O 的大作中提到】
: 你关心的问题是无意义的
avatar
l*a
15
Could u tell me what is the difference of value type and reference type?

【在 C*O 的大作中提到】
: 不可能 他们用c#,更关心OOD
avatar
C*O
16
value type, like int,string 会分配内存
int&, string&, 指向value type的类型, 像 int* const, string* const, 一样 不
会分配额外内存

【在 l*****a 的大作中提到】
: Could u tell me what is the difference of value type and reference type?
avatar
t*e
17
可以是 sizeof array/sizeof array[0]

【在 c**********e 的大作中提到】
: Is the answer sizeof(arr)/sizeof(int) if an integer array?
avatar
z*x
18
你的方法没有问题,但是如果数组地址是通过函数参数传过来的时候就有问题,原因上
面的答覆已经有所涵盖了。解决方法就是将数组长度也当成一个参数传进来
avatar
c*e
19
It does not work even it is not from a function.
For example,
int* arr=new int[10];
cout << sizeof(arr)/sizeof(arr[0]) << endl;
You will get 1.
You are right, size should be sent as a parameter.

【在 z**x 的大作中提到】
: 你的方法没有问题,但是如果数组地址是通过函数参数传过来的时候就有问题,原因上
: 面的答覆已经有所涵盖了。解决方法就是将数组长度也当成一个参数传进来

avatar
r*g
20
可以遍历一遍,到了“NULL”就停止。。。

【在 c**********e 的大作中提到】
: It does not work even it is not from a function.
: For example,
: int* arr=new int[10];
: cout << sizeof(arr)/sizeof(arr[0]) << endl;
: You will get 1.
: You are right, size should be sent as a parameter.

avatar
g*e
21
i don't think there's a way to get the size if not explicitly given.
avatar
c*e
22
This only works for c-string.

【在 c**********e 的大作中提到】
: It does not work even it is not from a function.
: For example,
: int* arr=new int[10];
: cout << sizeof(arr)/sizeof(arr[0]) << endl;
: You will get 1.
: You are right, size should be sent as a parameter.

avatar
c*e
23
For array on stack, it works.
int arr[100];
cout << sizeof(arr)/sizeof(int) << endl;
You do get 100. Though I am not sure if it is system dependent.

【在 g*********e 的大作中提到】
: i don't think there's a way to get the size if not explicitly given.
avatar
c*e
24
This only works for c-string.

【在 r********g 的大作中提到】
: 可以遍历一遍,到了“NULL”就停止。。。
avatar
h*f
25
as others mentioned, there is no way unless the array is on the stack.
that's why you see a lot of function declaration like void foo(int* array,
size_t length).
avatar
b*i
26
1
type* arr=new type[size];
cout <结果取决于type的大小 (sizeof(arr[0])),和系统的指针的大小 type*的大小。
比如64位系统,int* arr=new int[10];
sizeof(arr)/sizeof(arr[0])=2,因为指针是8bytes,int是4bytes
再比如32位系统, double* arr=new double[10];
sizeof(arr)/sizeof(arr[0])=0.5也就是显示0(取整)
2
不光stack上,static变量也可以算sizeof。
3
用引用可以保留size,但是不多此一举吗?
void foo(int (&array)[10]) {
std::cout << sizeof(array) << "\n";
}
4
int* arr = new int[10];之后,arr是一个指针。
而int arr[10]是数组,static int arr[10]也是数组,这两个在编译的时候就知道大
小,sizeof是编译的时候就算出来了。
数组名做函数参数的时候,你传进去的是一个arr的地址。这是C语言做得不太好的地方
,也是其他语言着重改进的地方。但是当年编译器设计者觉得挺好。C++兼容C, 没有改
这个地方,但是允许你自己定义一个类,所以你可以自己记录内存分配的大小。
如果面试问,就说数组转化成pointer了,参考
http://stackoverflow.com/questions/4223617/standard-conversions

【在 c**********e 的大作中提到】
: It does not work even it is not from a function.
: For example,
: int* arr=new int[10];
: cout << sizeof(arr)/sizeof(arr[0]) << endl;
: You will get 1.
: You are right, size should be sent as a parameter.

avatar
m*g
27
sizeof is mostly compile time stuff.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。