c的问题(2)# Programming - 葵花宝典x*a2015-07-31 07:071 楼请教,non profit H1B extension期间,找到另一个non profit H1B 的工作, 什么时候可以开始给新的雇主工作,是只要提交了就可以工作了吗,还是要批准后才能工作,非常感谢
f*d2015-07-31 07:072 楼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的方法是否正确,如果有问题,那么如何解决?
a92015-07-31 07:073 楼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。
d*n2015-07-31 07:074 楼//use malloc with reallocint size = 100;int used =0;float * array = malloc(sizeof(float)*);for (int i=0;i<1000;i++){if (i>=size){size*=2array = (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。
f*d2015-07-31 07:075 楼因为之后我要把MyArray作为一个参数传给一个API的函数,这个API函数没给当Array的长度不是固定的情况的例子。我不知道像我那么定义函数是否能知道MyArray的长度。【在 a9 的大作中提到】: sizeof是sizeof了指针。你不能这么搞。: 你在malloc的时候已经知道长度了啊,不就是sizeof(float)*n吗?
s*y2015-07-31 07:077 楼malloc 长度是比实际需要多一位,这一位标记为零。用这一位做数组结束的标志。或者就用ls的方法,在设计函数时把实际需要的长度作为参数2传入就可以了。第二种方法比较好。【在 f**********d 的大作中提到】: 因为之后我要把MyArray作为一个参数传给一个API的函数,: 这个API函数没给当Array的长度不是固定的情况的例子。: 我不知道像我那么定义函数是否能知道MyArray的长度。
c*e2015-07-31 07:078 楼你确定你用的是c?你确定你说的不是字符串?知道array长度没什么好办法,就是要显示声明(单独参数或者struct成员),看看windows api的例子就行了(比如 GetCurrentDirectory)。关于sizeof,这个是编译期操作符,不可能得到运行期长度的。【在 s******y 的大作中提到】: malloc 长度是比实际需要多一位,这一位标记为零。用这一位做数组结束的标志。: 或者就用ls的方法,在设计函数时把实际需要的长度作为参数2传入就可以了。: 第二种方法比较好。
d*a2015-07-31 07:079 楼代码没有问题,可以这样写。你只是要保证分配的空间确实有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。
s*y2015-07-31 07:0710 楼哦。是我搞错了。没仔细看。【在 c******e 的大作中提到】: 你确定你用的是c?你确定你说的不是字符串?: 知道array长度没什么好办法,就是要显示声明(单独参数或者struct成员),看看: windows api的例子就行了(比如 GetCurrentDirectory)。: 关于sizeof,这个是编译期操作符,不可能得到运行期长度的。