C固定数组指向数组的一部分

时间:2010-07-06 18:42:03

标签: c pointers arrays

4 个答案:

答案 0 :(得分:4)

Page成为unsigned char*而不是unsigned char[16384],您将拥有您想要的内容。唯一需要注意的是,您必须在外部记住(例如使用常量PAGE_SIZE或其他内容)页面的大小,因为您将无法使用sizeof(Page)来获取此信息。

e.g。 (也使用PAGE_SIZE常量消除代码中散布的幻数16384 ......)

/* In C, this has to be a define, since I'm going to use it as part of an
 * array size specifier. In C++ it could be a constant integer */
#define PAGE_SIZE 16384

typedef unsigned char* Page;
unsigned char Memory[PAGE_SIZE*64]={...values...};

Page tmp;
Memory[PAGE_SIZE+15]=50;
tmp=&Memory[PAGE_SIZE];
printf("Value should be 50: %d\n", tmp[15]); // Prints 50

/* Print out all of the values in page "tmp" */
for (int i = 0; i < PAGE_SIZE; ++i) {
  printf("%d\n", tmp[i]);
}

答案 1 :(得分:4)

作为函数参数的数组等同于指针。只需将Memory + 16384之类的偏移指针传递给函数。

答案 2 :(得分:3)

您可以声明页面数组:

Page Memory[64] = {{first page}, {2nd page} ... };

但是,这个数组将与平面阵列同构。

答案 3 :(得分:1)

如果您将tmp的类型更改为Page *,则可以执行以下操作:

Page *tmp;
Memory[16400]=50;
tmp = (Page *)&Memory[16384];
WritePageToSwapFile("swapfile", tmp);

......这就是你想要的吗?