我有一个for循环的问题,它应该将指针结构的信息放到数组中。此结构适用于复数。问题是数字m [n] .re / .im-他们不是korrekt。
typedef struct
{
float re, im;
} Complex;
#define N 2
#define M 2
int main()
{
Complex* p;
Complex matrix[N][M]; //already filled
Complex m[N*M];
int n;
n = 0;
p = NULL;
for(p = &matrix[0][0]; p<= &matrix[0][0]+N*M-1; p++)
{
m[n] = *p;
n = n+1;
}
}
答案 0 :(得分:1)
您可以使用标头memcpy
中声明的标准C函数<string.h>
,例如
memcpy( m, matrix, N * M * sizeof( Complex ) );
如果你想使用一个使用指针的循环,那么它可以通过以下方式查找
for ( Complex *q = ( Complex * )matrix, *p = m; q != ( Complex * )matrix + N * M; p++, q++ )
{
*p = *q;
}
答案 1 :(得分:1)
我修改了你的程序来初始化矩阵数组,并使用for循环打印到stdout中的矩阵和数组m的值:
#include <stdio.h>
typedef struct
{
float re, im;
} Complex;
#define N 2
#define M 2
int main()
{
Complex* p;
Complex matrix[N][M]; //already filled
Complex m[N*M];
int idx, jdx, val = 1;
for (idx = 0; idx < N; idx++) {
for (jdx = 0; jdx < M; jdx++) {
matrix[idx][jdx].re = val;
matrix[idx][jdx].im = val;
++val;
}
}
int n;
n = 0;
p = NULL;
for (p = &matrix[0][0]; p < &matrix[0][0] + N*M; p++)
{
printf("matrix[%d] = %f + %fi\n", n, p->re, p->im);
m[n] = *p;
n = n+1;
}
int midx = 0;
for (midx = 0; midx < N*M; midx++) {
printf("m[%d] = %f + %fi\n", midx, m[midx].re, m[midx].im);
}
return 0;
}
我不确定发生了什么,但对我而言,看起来你没有初始化数组。记住,memcpy是你的朋友。希望这段代码有所帮助。
答案 2 :(得分:0)
我认为指针TwitterTemplate
包含p
的地址。不确定,但尝试这样一次
struct Complex
答案 3 :(得分:0)
执行复制的最快方法是使用memcpy
,但如果要使用循环,则代码应如下所示
Complex matrix[N][M];
Complex array[N*M];
Complex *p = array;
for ( int n = 0; n < N; n++ )
for ( int m = 0; m < M; m++ )
*p++ = matrix[n][m];
在回应注释时,只给出指向矩阵的指针,并知道尺寸,就可以创建一个像二维数组一样的指针。
void someFunction( Complex *matrix, int sizeN, int sizeM )
{
Complex (*p)[sizeM] = (void *)matrix;
for ( int n = 0; n < sizeN; n++ )
for ( int m = 0; m < sizeM; m++ )
printf( "%f %f\n", p[n][m].re, p[n][m].im );
}