关于#c语言#二维数组 的问题



int FindMax(int* p, int m, int n, int* pRow, int* pCol)
{
    int i, j, max;
    max = p[0];
    *pRow = 0; *pCol = 0;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (max < p[i * n + j])    //请问 这一行是怎么遍历数组的,可以改成*(*(p+i)+j)吗?
            {
                max = p[i * n + j];
                *pRow = i;
                *pCol = j;
            }
        }
    }
    return max;
}
if (max < p[i * n + j])
可以改成
if (max < *(p + i * n + j))

数组是连续存储的,一行之后跟着另一行,所以偏移就是 i*n跳过i行,再跳过j个

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/354015
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:二级C语言-程序修改题常见错误归纳
  • 同时,你还可以查看手册:c语言-数组 中的内容
  • 除此之外, 这篇博客: 【C语言】二叉树练习题中的 ) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 描述

    编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

    输入描述:

    输入包括1行字符串,长度不超过100。

    输出描述:

    可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。

    示例1

    输入:

    abc##de#g##f###
    

    输出:

    c b e g d f a 
    

    解答

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct TreeNode
    {
        struct TreeNode* left;    
        struct TreeNode* right;
        char val;
    }TreeNode;
    //先序遍历创建二叉树, pi用来当作下标
    TreeNode* PrevCreateTree(char str[], int* pi)
    {
        TreeNode* Node = (TreeNode*)malloc(sizeof(TreeNode));
        if(str[*pi] == '#')
        {
            ++(*pi);
            return NULL;
        }
        Node->val = str[*pi];
        ++(*pi);
        
        Node->left = PrevCreateTree(str, pi);
        Node->right = PrevCreateTree(str, pi);
        return Node;
    }
    //中序遍历打印
    void InOrder(TreeNode* root)
    {
    	if (root == NULL)
    	{
    		return;
    	}
    
    	InOrder(root->left);
    	printf("%c ", root->val);
    	InOrder(root->right);
    }
    
    int main()
    {
        char str[100];
        scanf("%s", str);
        int i = 0;
        TreeNode* PrevTree = PrevCreateTree(str,  &i);
        InOrder(PrevTree);
    }