c - 使二维数组和一维数组的地址相等

标签 c arrays

这个程序接受一个字符数组并压缩它们....(aaaabbbcc-->a4b3c2)....我的程序在我将二维数组的地址等同于一维数组时显示错误.这是我的代码:

/* size1 defined as 5 and size2 as 10.... (consts)*/

void compress(char data[SIZE1][SIZE2]);

int main()
{
    char data[SIZE1][SIZE2];

    printf("Enter a 5x10 matrix of characters:\n");
    scanf("%c", &data);
    compress(data[SIZE1][SIZE2]);
    _getch();
    return 0;
}



void compress(char data[SIZE1][SIZE2])
{
    int hold[SIZE1*SIZE2];
    int cnt = 0;
    hold[SIZE1*SIZE2] = data[SIZE1][SIZE2];
    for (int i = 0; i < (SIZE1*SIZE2); i++)
    {
        if (hold[i] == hold[i + 1])
        {
            cnt++;
            continue;
        }
        else
        {
            printf("%c%d", hold[i], cnt);
        }
    }
}

这没有用,所以我尝试使用指针:

void compress(char data[SIZE1][SIZE2])
{
    int *hold[SIZE1*SIZE2];
    int cnt = 0;
    hold = data[SIZE1][SIZE2];
    for (int i = 0; i < (SIZE1*SIZE2); i++)
    {
        if (*(hold+i) == *(hold+i+1))
        {
            cnt++;
        }
        else
        {
            printf("%c%d", *(hold+i), cnt);
        }
    }
}

我认为 2d 数组的地址是线性存储的,因此它们可以直接 = 到 1d 的地址。但是错误说“'=':左操作数必须是左值”。我对指针很陌生.任何帮助或更正......请问?

最佳答案

#include <stdio.h>

#define SIZE1 3
#define SIZE2 3

void compress(char data[SIZE1][SIZE2]);

int main(){
    char data[SIZE1][SIZE2];

    printf("Enter a %dx%d matrix of characters:\n", SIZE1, SIZE2);
    for(int i=0;i<SIZE1;++i)
        for(int j=0;j<SIZE2;++j)
            scanf("%c", &data[i][j]);//aaaabbbcc
    compress(data);
    (void)getchar();
    return 0;
}

void compress(char data[SIZE1][SIZE2]){
    char *hold = &data[0][0];
    int cnt = 1, size = SIZE1*SIZE2;

    for (int i = 0; i < size; i++){
        if (i < size -1 && hold[i] == hold[i + 1]){
            cnt++;
            //continue;
        } else {
            printf("%c%d", hold[i], cnt);//a4b3c2
            cnt = 1;
        }
    }
}

关于c - 使二维数组和一维数组的地址相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22285914/

相关文章:

c - 如何让 Eclipse 识别 __far 修饰符?

c# - 将 C 迁移到 C# 问题!

javascript - 从 HTML 创建数组

python - Numpy 仅整数标量数组可以转换为标量索引 - 升级到 3.6

arrays - 在元胞数组中存储句柄对象时性能下降

c - 为什么这两个表达式的结果不同?

c - C--Linked List中的段错误

c - 如何将 dwExtraInfo 与 SendInput 一起使用

php - 如何将子值添加到新数组?

java - Hangman Java 游戏打印错误和正确的猜测