Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用指针交换数组_C_Arrays_Loops_Pointers - Fatal编程技术网

C 如何使用指针交换数组

C 如何使用指针交换数组,c,arrays,loops,pointers,C,Arrays,Loops,Pointers,我的任务是创建一个方阵,这个方阵需要乘以n的幂,m代表方阵的大小 用户的输入首先会保存到原始数组和临时数组中。一旦计算出总和,它将被保存到结果中,然后我应该用临时数组交换结果数组 int main() { // define variables int m, n; int matrix_1; int original[5][5]; int result[5][5]; int temporary[5][5]; int *ptrResult =

我的任务是创建一个方阵,这个方阵需要乘以n的幂,m代表方阵的大小

用户的输入首先会保存到原始数组和临时数组中。一旦计算出总和,它将被保存到结果中,然后我应该用临时数组交换结果数组

int main()
{
    // define variables
    int m, n;
    int matrix_1;
    int original[5][5];
    int result[5][5];
    int temporary[5][5];
    int *ptrResult = &result[0][0];
    int *ptrTemp = &temporary[0][0];
    int *hold = &result[0][0];

    // input from user with validations
    do
    {
        printf("Please input an array size in between 1 to 5: ");
        scanf("%d", &m);
    } while (m < 1 || m > 5);

    do
    {
        printf("Please input an integer as the multiplication power: ");
        scanf("%d", &n);
    } while (n <= 0);

    // input for elements in array
    if (m == 1)
    {
        printf("Value of element in matrix R with size M: ");
        scanf("%d", &original[0][0]);
    }
    else {
        for (int i = 0; i < m; i++) {
            for (int k = 0; k < m; k++) {
                printf("[%d][%d] = ", i, k);
                scanf("%d", &original[i][k]);
                temporary[i][k] = original[i][k];
            }
        }
    }

    int sum = 0;
    int a;
    for (int i = 1; i < n; i++) // Power nth
    {   
        for (int c = 0; c < m; c++) // Row
        {
            for (int d = 0; d < m; d++) // Column
            {
                for (int k = 0; k < m; k++)
                {

                    sum += temporary[c][k] * original[k][d];
                }
                result[c][d] = sum;
                sum = 0;                    
            }
            *hold = *(ptrResult + d);
            *(ptrResult + d) = *(ptrTemp + d);
            *(ptrTemp +d) = *hold;
        }    
    }   
intmain()
{
//定义变量
int m,n;
int矩阵_1;
int原件[5][5];
int结果[5][5];
int临时[5][5];;
int*ptrResult=&结果[0][0];
int*ptrTemp=&临时[0][0];
int*hold=&结果[0][0];
//来自用户的带有验证的输入
做
{
printf(“请输入介于1到5之间的数组大小:”);
scanf(“%d”、&m);
}而(m<1 | | m>5);
做
{
printf(“请输入一个整数作为乘法幂:”);
scanf(“%d”和“&n”);

}虽然(n我还不完全清楚您想做什么。但是您的代码有一些地方是/似乎是错误的

无法编译代码,因为变量
d
超出了范围

        for (int d = 0; d < m; d++) // Here d is defined, i.e. in scope
        {
            for (int k = 0; k < m; k++)
            {

                sum += temporary[c][k] * original[k][d];
            }
            result[c][d] = sum;
            sum = 0;                    
        }   // Here d gets out of scope


        *hold = *(ptrResult + d);  // So d can't be used here and
                                   // you'll get a compile error
但是看看你的
按住
指针。它指向什么

int *hold = &result[0][0];
它指向
result
中的第一个元素。因此,无论何时交换,都会破坏
result
中的第一个元素。这可能不是您想要的。而是创建另一个变量进行交换。例如:

int temp;
int* hold = & temp;

但是,总的来说,我不明白为什么要使用指针。为什么不使用简单的
数组[x][y]
表单。

int*ptrResult=&result[0][0];
int*hold=&result[0][0];
都指向数组的第一个元素

*hold = *(ptrResult + d);          
*(ptrResult + d) = *(ptrTemp + d); 
 *(ptrTemp +d) = *hold;
要避免将hold声明为'int'

int hold;

不清楚“使用指针交换数组”是什么意思。请根据代码中的变量描述预期行为。您具体指的是哪些指针,以及您希望每个指针在程序结束时指向什么?并且您的代码不完整,这增加了理解问题的难度。请提供一个。您(仍然)除了循环控件外,不要显示许多变量声明。特别是,不要显示
hold
ptrResult
ptrTemp
*(ptrResult+d)中的
d
不是上面循环中的
d
,这让人困惑。您继续交换相同的值,因为外部
d
和三个指针在代码中没有变化。请提供MCVE()前面提到过。d应该是循环中的d。很抱歉,我对此一无所知。@Jeevan-为什么要使用指针而不是简单的
数组[x][y]
form?指定使用的任务旨在增强我们对指针的了解,这就是为什么我希望使用指针而不是标准循环进行交换。如何确保我的ptrResult替换数组中每个元素的ptrTemp,同时也考虑到即使用户只需要3x3,也是5x5矩阵的事实矩阵。
int hold;