当前位置: 首页 > 知识库问答 >
问题:

在没有强制转换的情况下从integer(pointer)生成指针(integer

孔才
2023-03-14
#include<stdio.h>
#include<stdlib.h>

int **transpose(int a[], int b[], int raw, int column){
    int i, j;
    for(i=0; i < raw ; i++)
        for(j=0; j < column ; j++)
            *(b+(j*raw + i)) = *(a+(i*column + j));
    return *b;
}

int **mk_matrix(int raw, int col){
    int i;
    int **matrix = (int**)malloc(sizeof(int*)*raw);
    matrix[0] = (int*)malloc(sizeof(int)*(raw*col));
    for(i=1 ; i < raw ; i++)
        matrix[i] = matrix[i-1] + col;
    
    return matrix;
}

void main(void){
    int r, c, i, j;
    
    printf("Input the size of matrix : ");
    scanf("%d %d", &r, &c);
    
    int **matrix = mk_matrix(r, c);
    int **trans_matrix = mk_matrix(c, r);
    
    printf("Input elements of the %dx%d matrix : ", r, c);
    for(i=0; i < r ; i++)
        for(j=0; j < c ; j++)
            scanf("%d", &matrix[i][j]);
    
    **trans_matrix = transpose(matrix[0], trans_matrix[0], r, c);
    
    for(i=0; i < c ; i++){
        for(j=0; j < r ; j++)
            printf("%d ", trans_matrix[i][j]);
        printf("\n");
    }
}
  1. return在没有强制转换的情况下从整数创建指针->return*b;
  2. 赋值从没有强制转换的指针生成整数->**trans_matrix=转置(矩阵[0],trans_matrix[0],r,c);警告。

如何修复代码未显示警告?

共有1个答案

林弘文
2023-03-14

你不需要

返回*B

int**转置(int A[],int B[],int raw,int column)

void transpose(int a[], int b[], int raw, int column){
    int i, j;
    for(i=0; i < raw ; i++)
        for(j=0; j < column ; j++)
            *(b+(j*raw + i)) = *(a+(i*column + j));
}
 类似资料:
  • 指针变量数据类型的强制转换 必须显式强制类型转换,不允许隐式类型转换 指向空间的强制类型转换,本质上就是普通变量的强制类型转换 int a = 10; float b = 3.14; int *pa = &a; float *pb = &b; *pa = (int)*pb; // 等价于 a = (int)b; 指针本身强制类型转换,改变的是对其指向空间的引用方式(空间大小和存储结构) int

  • 假设代码是用c11编译的,并且启用了严格别名。 我不是在寻找一种不同的方法,我想专注于这个具体的问题,以及它是否可行或为什么不可行。 (如果我无意中犯了一些无关的错误,请告诉我,我会改正的) C11标准说: 6.2.5.28所有指向结构类型的指针应具有彼此相同的表示和对齐要求。 6.7.2.1.6结构是由成员序列组成的类型,其存储按有序顺序分配 这意味着结构A和B中指针的大小和对齐方式相同。 结构

  • 指向指针的指针是多个间接或指针链的形式。 通常,指针包含变量的地址。 当我们定义指向指针的指针时,第一个指针包含第二个指针的地址,它指向包含实际值的位置,如下所示。 必须声明一个指向指针的指针的变量。 这是通过在其名称前面放置一个额外的星号来完成的。 例如,以下是声明指向int类型指针的指针的声明 - int **var; 当目标值由指针指向间接指向时,访问该值需要应用星号运算符两次,如下例所示

  • 指向指针的指针是多个间接或指针链的形式。 通常,指针包含变量的地址。 当我们定义指向指针的指针时,第一个指针包含第二个指针的地址,它指向包含实际值的位置,如下所示。 必须声明一个指向指针的指针的变量。 这是通过在其名称前面放置一个额外的星号来完成的。 例如,以下是声明指向int类型指针的指针的声明 - int **var; 当目标值由指针指向间接指向时,访问该值需要应用星号运算符两次,如下例所示

  • 公有派生类的对象可作为其相应基类的对象处理,这使得一些有意义的操作成为可能。例如,从某个特定基类派生出来的各种类,尽管这些类的对象彼此之间互不相同,但是仍然能够建立这些对象的链表,只要把这些对象作为基类对象处理就可以了。然而反过来是不行的,基类的对象不能自动成为派生类的对象。 常见编程错误 9.1 将基类对象作为派生类对象处理。 程序员可以用显式类型转换把基类指针强制转换为派生类指针。但是,如果要

  • 考虑以下代码: 我必须定义一个回调函数,我想在该函数中使用一些附加信息。我定义了自己的结构并将成员的地址传递给函数。在函数中,我想通过强制转换“检索”整个结构,但指针似乎不匹配,我得到了错误的结果。我想我在选演员时做错了什么,但我不确定是什么?