C-如何将数组结构指向变量?
我需要创建一个变量来接收数组格式,但不接收数组位置的精确值。我该怎么做?下面的例子显示了我想要做什么(并不是说它正在工作,只是为了显示我的意图)C-如何将数组结构指向变量?,c,arrays,C,Arrays,我需要创建一个变量来接收数组格式,但不接收数组位置的精确值。我该怎么做?下面的例子显示了我想要做什么(并不是说它正在工作,只是为了显示我的意图) #包括 #包括 #包括 int main(){ int i,j,m=30; 双T[m][m],aE=3,TE; TE=T[i][j+1]; 对于(i=1;i
#包括
#包括
#包括
int main(){
int i,j,m=30;
双T[m][m],aE=3,TE;
TE=T[i][j+1];
对于(i=1;i<30;i++)
对于(j=1;j<30;j++)
T[i][j]=(aE*TE);
getch();
返回(0);
}
好的,数组将有很多double
值,我希望TE
指向结构T[I][j+I]
,这样每当我需要T
数组的位置时,我都可以使用TE
这是怎么可能的呢?在您的示例中,有几个错误会在编译过程中提供它(我想这很难让我们了解结构是什么样子的)。我将尝试在这里编写一个工作版本,可以做类似的事情
#ifdef MALLOC_ME
int i, j, m;
m = inputed_matrix_size;
double **T = malloc(sizeof(double) * m * m);
#else
# define MATRIX_SIZE 30
int i, j, m = MATRIX_SIZE;
double T[MATRIX_SIZE][MATRIX_SIZE];
#endif // MALLOC_ME
// I'll assume we put some defined value in the first line, first column
// that will be used as source in later calculation.
T[0][0] = value;
double *TE = &T[0][0];
double aE = some_indice_value;
for (i = 0 ; i < m ; i++)
for (j = 0 ; j < m ; j++)
{
if (i == 0 && j == 0)
continue; // lets not override our template value;
T[i][j] = aE * (*TE);
// *TE is the double value contained at the position of the array stored earlier
}
\ifdef MALLOC\u ME
int i,j,m;
m=输入的矩阵大小;
双**T=malloc(双*m*m的尺寸);
#否则
#定义矩阵_大小30
int i,j,m=矩阵的大小;
双T[矩阵大小][矩阵大小];
#endif//MALLOC\u ME
//我假设我们在第一行第一列中放入一些定义的值
//这将在以后的计算中用作源。
T[0][0]=数值;
双*TE=&T[0][0];
双aE=某些指示值;
对于(i=0;i
double*TE;TE=&T[i][j+1]代码>但这仅适用于当前的i
和j
,您尚未初始化它们,因此它们是未定义的行为。我不明白您的要求,但在您的代码中,您可以在不初始化i的情况下初始化TE=t[i][j+1],如果没有宏,则无法实现jIt。您可以使TE
指向特定元素,但如果您更新i
或j
,则TE
仍然指向它之前指向的相同元素。我认为最好显式地使用T[I][j+1]
,因为它真正显示了您想要做什么和正在做什么。只使用T[I][j+1]
有什么问题吗?您不能使用'm'作为数组初始值设定器,因为它不是常量
#ifdef MALLOC_ME
int i, j, m;
m = inputed_matrix_size;
double **T = malloc(sizeof(double) * m * m);
#else
# define MATRIX_SIZE 30
int i, j, m = MATRIX_SIZE;
double T[MATRIX_SIZE][MATRIX_SIZE];
#endif // MALLOC_ME
// I'll assume we put some defined value in the first line, first column
// that will be used as source in later calculation.
T[0][0] = value;
double *TE = &T[0][0];
double aE = some_indice_value;
for (i = 0 ; i < m ; i++)
for (j = 0 ; j < m ; j++)
{
if (i == 0 && j == 0)
continue; // lets not override our template value;
T[i][j] = aE * (*TE);
// *TE is the double value contained at the position of the array stored earlier
}