C 如何指向数组
我正在为OpenGL编写一个着色器,我需要能够传入一个数据数组。我需要能够通过引用传递,因为我无法复制整个数组。我知道你不能用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初始元素的指针。(隐
顶点*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]