s******e 发帖数: 2181 | 1 基本道理清楚,数组作为参数传递给函数的只是数组首元素的地址,函数在需要用到后
面元素时再按照这个地址和数组下标去查找。同时,数组名又正好是数组首元素的地址
,所以在主函数里调用子函数时只需写数组名,那么首元素的地址就传出去了。
我的问题来了,如下例,被调用的函数multiply的形参部分,float *p说明p是一个地
址,这个地址就是传过来的数组首元素的地址。既然p只是地址,那后面的操作
p[0]=2*p[0]
p[1]=2*p[1]
p[2]=2*p[2]
...
不是在把地址乘以2吗,怎么就变成把地址里面的内容乘以2了?用*p[...]来操作是不
是更符合情理?而且p既然是一个地址,怎么就可以写成p[...]了呢,这不变成地址数
组了吗?
虽然实际当中都在这样写,但心中的困惑一直都在。我不是专业马工,求专业马工解惑
并轻拍。
main()
{
float num[]={2.0,3.1,8.6,4.1,7.9};
const int size=sizeof(num)/sizeof(int);
multiply(num,size);
...
}
void multiply(float *p,int size)
{
int idx=threadIdx.x;
if (idx
p[idx]=2*p[idx];
} | d****i 发帖数: 4809 | 2 Simple rule: For array, using index is equivalent to dereferencing:
a[i] == *(a+i)
You increment a's address by offset i and load the value from memory (that'
s why array's index always starts from 0 for all computer programming
languages)
【在 s******e 的大作中提到】 : 基本道理清楚,数组作为参数传递给函数的只是数组首元素的地址,函数在需要用到后 : 面元素时再按照这个地址和数组下标去查找。同时,数组名又正好是数组首元素的地址 : ,所以在主函数里调用子函数时只需写数组名,那么首元素的地址就传出去了。 : 我的问题来了,如下例,被调用的函数multiply的形参部分,float *p说明p是一个地 : 址,这个地址就是传过来的数组首元素的地址。既然p只是地址,那后面的操作 : p[0]=2*p[0] : p[1]=2*p[1] : p[2]=2*p[2] : ... : 不是在把地址乘以2吗,怎么就变成把地址里面的内容乘以2了?用*p[...]来操作是不
| r******l 发帖数: 10760 | | s******e 发帖数: 2181 | 4 谢谢解惑,我的问题是这样的,这是一个被我简化后的在matlab环境下运行的C程序。
我想测试我输入的数据是否被正确读入。一个途径是通过把输入参数赋给输出的地址,
来得到结果,看来是正确的。另一个是通过printf把输入数据直接打出来,可是这个打
出来的数字始终为0,无论采用printf("input=%dn", data2[0]); 还是printf("input=
%dn", *data2);都一样。真是见鬼了,那data2这个地址上存的数据到底是什么
#include "mex.h"
#include "gpu/mxGPUArray.h"
#include "cuda.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, mxArray const *prhs[])
{
double *data1; *data2;
int m,n;
m=mxGetM(prhs[0]);
n=mxGetN(prhs[0]);
plhs[0]=mxCreateDoubleMatrix(m,n,mxREAL);
data1=mxGetPr(prhs[0]);
data2=mxGetPr(plhs[0]);
data2[0]=data1[0];
printf("input=%dn", data2[0]);
}
that'
【在 d****i 的大作中提到】 : Simple rule: For array, using index is equivalent to dereferencing: : a[i] == *(a+i) : You increment a's address by offset i and load the value from memory (that' : s why array's index always starts from 0 for all computer programming : languages)
| s******e 发帖数: 2181 | 5 hi你好,我把我的确切问题更新在3楼了。
为什么通过plhs输出的结果,跟直接用printf打印出来的结果会不同呢?我data2[0]的
写法有错吗?
【在 r******l 的大作中提到】 : p是地址,但p[..]就已经不是了啊。
|
|