我试图使用变量作为增量来增加一个int数组,但它会抛出一个错误。
int array[MAXSIZE];
int n;
//fill the array with some numbers
//some other code
这里的情况是,一旦我分析了第一个" n"数字我将不再需要它们,从开始迭代数组将浪费周期,所以我想通过" n"来增加数组。 注意:由于我正在处理的问题类型,我不能只是 保存变量中的位置,然后使用array [position]从该位置开始;我必须永久地增加指针。
array += n;
并抛出此错误:分配中的类型不兼容。
我事先并不知道" n"将是。我试着用
array + = sizeof(int)* n; 但也失败了。
答案 0 :(得分:2)
int array[MAXSIZE];
array
是一个数组而不是指针。您不能递增数组变量。
你可以这样做:
int *p = array;
p += whatever;
当它指向数组最后一个元素之外的任何元素时,请确保您不要尊重p
。
打印array
和p
会给你相同的输出(地址)这一事实并不能使它们成为同样的东西。
答案 1 :(得分:0)
数组名称是type * const array_name
所以你不能移动它。(注意它是一个const指针)
你可以自己定义一个指针,然后移动它。例如:
int *arr = new int[siz];
或在c:
int *arr = (int *)malloc(n * sizeof(int));
如果源代码在.c文件中,则无需进行强制转换。
答案 2 :(得分:0)
根据C标准(6.3.2.1 Lvalues,数组和函数指示符)
3除非它是sizeof运算符或一元&的操作数。 operator,或者是用于初始化数组的字符串文字,a 具有类型''数组类型''的表达式将转换为 带有''指向类型'的指针的表达式,指向初始值 数组对象的元素和不是左值。如果是数组 对象具有寄存器存储类,行为未定义。
所以你可能不会像
这样更改数组member 12345 expired status: false
member 1234567 expired status: false
所以只需再使用array += n;
类型的另一个变量。例如
int *
答案 3 :(得分:0)
use Phinx\Db\Table as BaseTable;
class Table extends BaseTable { /*...*/ }
这应该这样做。
答案 4 :(得分:0)
如果您尝试使用数据填充数组,则需要索引数组。
int array[MAXSIZE];
int i;
for (i = 0; i < MAXSIZE; i++) {
array[i] = rand();
}
如果你真的想要使用指针,并做'指针算术'那么你一定要小心。
int array[MAXSIZE];
int *p;
int i;
p = &(array[0]);
for (i = 0; i < MAXSIZE; i++) {
*p = rand();
p += 1;
}
指针算法可能无法正常工作...执行p += 1
不会将指针移动到一个字节,甚至一个int
,但它会沿大小移动地址变量的取消引用类型。
做一个实验:
#include <stdio.h>
void main(void) {
struct info {
int a;
int b;
};
struct info array[10];
struct info *p;
int n;
p = &(array[0]);
printf("sizeof(*p): %zu\n", sizeof(*p));
for (n = 0; n < 10; n++) {
printf("address: %p\n", p);
p += 1;
}
}
每次循环时,p
的值会增加sizeof(*p)
。