avatar
x*a
1
请教,non profit H1B extension期间,找到另一个non profit H1B 的工作, 什么时
候可以开始给新的雇主工作,是只要提交了就可以工作了吗,还是要批准后才能工作,
非常感谢
avatar
f*d
2
c里面不允许declare动态长度的array.
但因为我的array的长度是从文件中读入,事先并不知道array的长度。
所以我用以下方法:
float *MyArray = malloc(sizeof(float) * N); // N为array的长度的变量
for (i = 0; i < N; ++i)
{
MyArray[i] = Seg[i]; // Seg[N]为array内容的array.
}
但是这样做之后,sizeof(MyArray)为4,也就是一个float的长度。而如果指定N为常数
,比如2。
那么sizeof(MyArray)长度就是8。
两个问题:我这样定义事先不知道长度的array的方法是否正确,如果有问题,那么如
何解决?
avatar
a9
3
sizeof是sizeof了指针。你不能这么搞。
你在malloc的时候已经知道长度了啊,不就是sizeof(float)*n吗?

【在 f**********d 的大作中提到】
: c里面不允许declare动态长度的array.
: 但因为我的array的长度是从文件中读入,事先并不知道array的长度。
: 所以我用以下方法:
: float *MyArray = malloc(sizeof(float) * N); // N为array的长度的变量
: for (i = 0; i < N; ++i)
: {
: MyArray[i] = Seg[i]; // Seg[N]为array内容的array.
: }
: 但是这样做之后,sizeof(MyArray)为4,也就是一个float的长度。而如果指定N为常数
: ,比如2。

avatar
d*n
4
//use malloc with realloc
int size = 100;
int used =0;
float * array = malloc(sizeof(float)*);
for (int i=0;i<1000;i++){
if (i>=size){
size*=2
array = (float*)realloc(array,sizeof(float)*size);
}
array[used++] = float(i*100.);
}
free (array) ;

【在 f**********d 的大作中提到】
: c里面不允许declare动态长度的array.
: 但因为我的array的长度是从文件中读入,事先并不知道array的长度。
: 所以我用以下方法:
: float *MyArray = malloc(sizeof(float) * N); // N为array的长度的变量
: for (i = 0; i < N; ++i)
: {
: MyArray[i] = Seg[i]; // Seg[N]为array内容的array.
: }
: 但是这样做之后,sizeof(MyArray)为4,也就是一个float的长度。而如果指定N为常数
: ,比如2。

avatar
f*d
5
因为之后我要把MyArray作为一个参数传给一个API的函数,
这个API函数没给当Array的长度不是固定的情况的例子。
我不知道像我那么定义函数是否能知道MyArray的长度。

【在 a9 的大作中提到】
: sizeof是sizeof了指针。你不能这么搞。
: 你在malloc的时候已经知道长度了啊,不就是sizeof(float)*n吗?

avatar
b*7
6
不知道长度,需要传另外一个长度参数。
avatar
s*y
7
malloc 长度是比实际需要多一位,这一位标记为零。用这一位做数组结束的标志。
或者就用ls的方法,在设计函数时把实际需要的长度作为参数2传入就可以了。
第二种方法比较好。

【在 f**********d 的大作中提到】
: 因为之后我要把MyArray作为一个参数传给一个API的函数,
: 这个API函数没给当Array的长度不是固定的情况的例子。
: 我不知道像我那么定义函数是否能知道MyArray的长度。

avatar
c*e
8
你确定你用的是c?你确定你说的不是字符串?
知道array长度没什么好办法,就是要显示声明(单独参数或者struct成员),看看
windows api的例子就行了(比如 GetCurrentDirectory)。
关于sizeof,这个是编译期操作符,不可能得到运行期长度的。

【在 s******y 的大作中提到】
: malloc 长度是比实际需要多一位,这一位标记为零。用这一位做数组结束的标志。
: 或者就用ls的方法,在设计函数时把实际需要的长度作为参数2传入就可以了。
: 第二种方法比较好。

avatar
d*a
9
代码没有问题,可以这样写。你只是要保证分配的空间确实有N个element,否则会有数
组访问溢出。在机器代码层,MyArray[i]的实际意义是*(MyArray+i)。
你不用去管sizeof()的返回值。MyArray是个指针,存放的是内存地址,sizeof(
MyArray)返回的就是指针本身的字节数,在32位机器上就是4个字节。

【在 f**********d 的大作中提到】
: c里面不允许declare动态长度的array.
: 但因为我的array的长度是从文件中读入,事先并不知道array的长度。
: 所以我用以下方法:
: float *MyArray = malloc(sizeof(float) * N); // N为array的长度的变量
: for (i = 0; i < N; ++i)
: {
: MyArray[i] = Seg[i]; // Seg[N]为array内容的array.
: }
: 但是这样做之后,sizeof(MyArray)为4,也就是一个float的长度。而如果指定N为常数
: ,比如2。

avatar
s*y
10
哦。是我搞错了。没仔细看。

【在 c******e 的大作中提到】
: 你确定你用的是c?你确定你说的不是字符串?
: 知道array长度没什么好办法,就是要显示声明(单独参数或者struct成员),看看
: windows api的例子就行了(比如 GetCurrentDirectory)。
: 关于sizeof,这个是编译期操作符,不可能得到运行期长度的。

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