我有一个数组,其中包含指向其他数组的指针。我想打印所有值,但我无法获得特定数组的sizeof。我做错了什么?
private void downloadImage()
{
RealmResults<ARDatabase> results = mRealm.where(ARDatabase.class).findAll();
for(ARDatabase x:results)
{
if(!x.getIsDownloaded())
{
mdataCollection.add(new DownLoadList(x.getUrlImg(),x.getUid()));
}
}
for(DownLoadList i:mdataCollection)
{
Log.e("Link",""+i.getImageUrl());
Picasso.with(getApplicationContext()).load(i.getImageUrl()).into(target);
}
}
private Target target = new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from)
{
Log.e("PICASSO","SUCCESSFUL");
new Thread(new Runnable() {
@Override
public void run() {
File sd = getExternalCacheDir();
File folder = new File(sd, "/arproject/");
if (!folder.exists()) {
if (!folder.mkdir()) {
Log.e("ERROR", "Cannot create a directory!");
} else {
folder.mkdirs();
}
}
//File[] fileName = {new File(folder, "one.jpg"), new File(folder, "two.jpg")};
for (DownLoadList i:mdataCollection)
{
File fileName = new File(folder,i.getUid().toLowerCase()+".jpg");
if (!fileName.exists()) {
try {
fileName.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
try {
FileOutputStream outputStream = new FileOutputStream(String.valueOf(fileName));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
@Override
public void onBitmapFailed(Drawable errorDrawable)
{
Log.e("PICASSO","FAILED"+errorDrawable.toString());
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
答案 0 :(得分:7)
你不能。一旦数组衰减到指针,您就不再拥有有关数组大小的信息。你需要以其他方式跟踪它。
在显示代码的情况下,您可以拥有第二个数组TAB_SIZES
,其中包含TAB
中指向的数组的大小。
还要记住,对于任何数组或指针p
和索引i
,表达式p[i]
等于*(p + i)
。这意味着你不必做*(TAB[i]+j)
。而是TAB[i][j]
,感觉更自然&#34;对大多数人来说。
答案 1 :(得分:1)
当在数组上使用时,sizeof返回该数组中元素的数量乘以每个数组的大小,如下所示。
int a[10];
sizeof(a); /* returns (sizeof(int) * 10) */
有关此代码的示例,请参阅here。
但是,当您将T1,T2,T3,T4和T5指定为TAB的元素时,它们将转换为float *,并且TAB中不存在它们作为数组的信息。因此,当使用参数TAB [i]调用sizeof时,它只被解释为指向float的指针,并返回sizeof(float *)。
答案 2 :(得分:0)
你必须自己跟踪它。在GCC中,支持以下扩展:
struct sized_array {
int size;
float array[0];
}
它被称为零长度数组。以及你如何分配内存:
int target_size = 100;
struct sized_array *the_array = malloc(sizeof(struct sized_array) + target_size * sizeof(float));
the_array->size = target_size;
和the_array
自动包含一个带有(至少)100个浮点槽的数组。更多详细信息,请参阅info gcc
,6.17。