C 如何指向数组

C 如何指向数组,c,arrays,pointers,pass-by-reference,argument-passing,C,Arrays,Pointers,Pass By Reference,Argument Passing,我正在为OpenGL编写一个着色器,我需要能够传入一个数据数组。我需要能够通过引用传递,因为我无法复制整个数组。我知道你不能用顶点*v[100]定义指向结构数组的指针 > < P> C和C++,数组从不通过值。 当数组类型出现在函数声明中时(如void f(int a[])),该类型将隐式转换为相应的指针类型(如void f(int*a)) 在大多数表达式中使用数组名称时,它会隐式转换为指向其第一个元素的指针。因此,给定intv[100],当调用f(v)时,将传递一个指向v初始元素的指针。(隐

我正在为OpenGL编写一个着色器,我需要能够传入一个数据数组。我需要能够通过引用传递,因为我无法复制整个数组。我知道你不能用
顶点*v[100]定义指向结构数组的指针
我认为可以使用
bindarayfunction(&v)传递c数组中第一个元素的内存位置但是我应该如何使用它呢?我会将指针增加结构的大小以获得每个顶点吗


任何帮助或评论都将不胜感激。

在大多数情况下,数组会衰减到指向其第一个元素的指针。如果你有一个函数:

void foo(int *p)
{
    printf("%d\n", p[2]);
}
那么这两个调用是相同的:

int array[10];

foo(array);
foo(&array[0]);

在这两种情况下,都会向函数传递一个指针,从而允许函数访问整个数组。

在大多数情况下,数组衰减为指向其第一个元素的指针。如果你有一个函数:

void foo(int *p)
{
    printf("%d\n", p[2]);
}
那么这两个调用是相同的:

int array[10];

foo(array);
foo(&array[0]);

在这两种情况下,都会向函数传递一个指针,从而允许函数访问整个数组。

只需将其作为数组引用即可

void bindArrayFunction(Vertices *v, int size) {
  for (int i = 0; i < size; ++i) {
    process(v[i]);
  }
}
void bindarayfunction(顶点*v,整数大小){
对于(int i=0;i
只需将其作为数组引用即可

void bindArrayFunction(Vertices *v, int size) {
  for (int i = 0; i < size; ++i) {
    process(v[i]);
  }
}
void bindarayfunction(顶点*v,整数大小){
对于(int i=0;i
当数组类型出现在函数声明中时(如
void f(int a[])
),该类型将隐式转换为相应的指针类型(如
void f(int*a)

在大多数表达式中使用数组名称时,它会隐式转换为指向其第一个元素的指针。因此,给定
intv[100]
,当调用
f(v)
时,将传递一个指向
v
初始元素的指针。(隐式转换有几个例外,尤其是当数组是
sizeof
或一元
&
运算符的操作数时)

指针运算总是根据指向元素的大小来完成的。因此,给定代码< V+ 1 ,数组<代码> V<代码>隐式地转换为指针的初始元素(等效于<代码>和[V](0)/代码>,并通过<代码> SIEZOF(int)< /COD>字节递增,指向<代码> V [1 ] < /C> >

< P> C和C++,数组从不通过值。

当数组类型出现在函数声明中时(如
void f(int a[])
),该类型将隐式转换为相应的指针类型(如
void f(int*a)

在大多数表达式中使用数组名称时,它会隐式转换为指向其第一个元素的指针。因此,给定
intv[100]
,当调用
f(v)
时,将传递一个指向
v
初始元素的指针。(隐式转换有几个例外,尤其是当数组是
sizeof
或一元
&
运算符的操作数时)

指针运算总是根据指向元素的大小来完成的。因此,给定
v+1
,数组
v
被隐式转换为指向其初始元素的指针(相当于
&v[0]
),并增加
sizeof(int)
字节,指向
v[1]