繁体   English   中英

如何在c中增加数组

[英]how to increment an array in c

我正在尝试使用变量作为增量来递增int数组,但会引发错误。

int array[MAXSIZE];
int n;

//fill the array with some numbers
//some other code

这里的情况是,一旦我分析了第一个“ n”个数字,我将不再需要它们,并且从开始迭代数组就浪费了很多周期,因此我想将数组增加“ n”个。 注意:由于我正在处理的问题的类型,我不能只将位置保存在变量中,以后再使用array [position]从该位置开始; 我必须永久增加指针。

array += n;

并引发此错误:分配中的类型不兼容。
我事先不知道“ n”将是什么。 我试图使用数组+ = sizeof(int)* n; 但它也失败了。

int array[MAXSIZE]; array是一个数组,而不是一个指针。 您不能增加数组变量。 您可以执行以下操作:

int *p = array;
p += whatever;

只要确保在指向数组最后一个元素之外的任何元素时都不要引用p就可以了。

打印出arrayp会为您提供相同的输出(地址)的事实并不能使它们具有相同的含义。

数组名是type * const array_name因此您不能移动它。(请注意,它是const指针)您可以自己定义一个指针然后移动它。 例如:

int *arr = new int[siz];

或在c中:

int *arr = (int *)malloc(n * sizeof(int));

如果源代码位于.c文件中,则无需进行强制转换。

根据C标准(6.3.2.1左值,数组和函数指示符)

3除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则类型为“ array of type”的表达式将转换为类型为“ pointer”的表达式键入'',它指向数组对象的初始元素, 不是左值 如果数组对象具有寄存器存储类,则该行为未定义。

因此,您可能无法更改数组,例如

array += n;

因此,只需再使用一个int *类型的变量。 例如

int array[MAXSIZE];
int n;

//...

int *p = array;

p += n;
#include<stdio.h>
#include<stdlib.h>
#define MAX 100

int main()
{

    int array*,i,n;

    printf("Enter size of array:\n");
    scanf("%d",&n);

    array = malloc(n*sizeof(int));

    /* code to enter numbers in array */

    array += n;

    //remember to free pointers after you are done with them

    free(array);

    return 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM