Juniorboy 发表于 2020-5-10 20:35:41

关于强制转换

#include <stdio.h>

int main()
{
      int array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
      int (*p) = (int (*))&array;

      printf("%d\n", p);

      return 0;
}

请问这个强制转换的格式是    :(数据类型)这个格式吗
这个代码中应该是强制转换成一个指向一个一维数组的数组指针,为什么说强制把array转化成了一个二维数组,如果转换成指向一个二维数组的话的指针的话,应该是(int(*)【3】【3】)
,没明白这个是怎么用的强制转换,越详细越好,麻烦大家了。谢谢

人造人 发表于 2020-5-10 21:07:44

给你两个程序,你来观察这两个程序的区别
注意,我把 test5 注释掉了,因为这个函数是错误的

#include <stdio.h>

#define LEN 5

void test1(int data[]) {
    for(int i = 0; i < LEN; ++i)
      printf("%d ", data);
    printf("\n");
}

void test2(int data) {
    for(int i = 0; i < LEN; ++i)
      printf("%d ", data);
    printf("\n");
}

void test3(int data) {
    for(int i = 0; i < LEN; ++i)
      printf("%d ", data);
    printf("\n");
}

void test4(int *data) {
    for(int i = 0; i < LEN; ++i)
      printf("%d ", data);
    printf("\n");
}

int main(void) {
    int data = {1, 2, 3, 4 ,5};
    test1(data);
    test2(data);
    test3(data);
    test4(data);
    return 0;
}


#include <stdio.h>

#define LEN 3

void test1(int data[]) {
    for(int y = 0; y < LEN; ++y) {
      for(int x = 0; x < 5; ++x) {
            printf("%d ", data);
      }
      printf("\n");
    }
    printf("\n");
}

void test2(int data) {
    for(int y = 0; y < LEN; ++y) {
      for(int x = 0; x < 5; ++x) {
            printf("%d ", data);
      }
      printf("\n");
    }
    printf("\n");
}

void test3(int data) {
    for(int y = 0; y < LEN; ++y) {
      for(int x = 0; x < 5; ++x) {
            printf("%d ", data);
      }
      printf("\n");
    }
    printf("\n");
}

void test4(int (*data)) {
    for(int y = 0; y < LEN; ++y) {
      for(int x = 0; x < 5; ++x) {
            printf("%d ", data);
      }
      printf("\n");
    }
    printf("\n");
}

/*
void test5(int *data) {
    for(int y = 0; y < LEN; ++y) {
      for(int x = 0; x < 5; ++x) {
            printf("%d ", data);
      }
      printf("\n");
    }
    printf("\n");
}
*/

int main(void) {
    int data = {
      {11, 12, 13, 14 ,15},
      {21, 22, 23, 24 ,25},
      {31, 32, 33, 34 ,35}
    };

    test1(data);
    test2(data);
    test3(data);
    test4(data);
    //test5(data);
    return 0;
}

小猪鼠 发表于 2020-5-10 22:24:52

这里我看指针数组那一部分知识将它这样理解:
首先
int (*p)定义一个含有3个元素的指针数组,这3个元素都是指向一个数组的指针,然后(int(*))&array将array强制转换成一个指向数组的指针;最后对应着有p=&array,p=&array,p=&array。个人理解,有错误请多指点{:5_92:}
页: [1]
查看完整版本: 关于强制转换