[英]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
就可以了。
打印出array
和p
会为您提供相同的输出(地址)的事实并不能使它们具有相同的含义。
数组名是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.