簡體   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