如何在c

时间:2017-03-24 16:38:37

标签: c arrays pointers

我试图使用变量作为增量来增加一个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; 但也失败了。

5 个答案:

答案 0 :(得分:2)

int array[MAXSIZE]; array是一个数组而不是指针。您不能递增数组变量。 你可以这样做:

int *p = array;
p += whatever;

当它指向数组最后一个元素之外的任何元素时,请确保您不要尊重p

打印arrayp会给你相同的输出(地址)这一事实并不能使它们成为同样的东西。

答案 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)