#c语言# 指针和二维数组

#include
int main()
{

char m[2][6] = { "abcd","bcdef" };
char * p =(char*) m;

printf("%c\n", m[1][2]);
printf("%c\n", *(++p)+2);
printf("%c\n", *(p+7));
printf("%c\n", *(*(++p) + 2);  //  为什么这样是错误的?

    

return 0;

}

括号不匹配啊
printf("%c\n", *(*(++p) + 2));


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7763557
  • 你也可以参考下这篇文章:C语言递归解决十进制转换二进制
  • 你还可以看下c语言参考手册中的 c语言-指针
  • 除此之外, 这篇博客: C语言进阶:指针进阶中的 二维数组传参 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    //1.
    void test(int arr[3][5]) 
    {}
    //2.
    void test(int arr[][])
    {}
    //3.
    void test(int arr[][5])
    {}
    int main() {
    	int arr[3][5] = { 0 };
    	test(arr);
    }
    
    • 二维数组传参用二维数组接收,行可省略,但列不可以
    //4.
    void test(int* arr)
    {}
    //5.
    void test(int* arr[5])
    {}
    //6.
    void test(int(*arr)[5])
    {}
    //7.
    void test(int** arr)
    {}
    int main() {
    	int arr[3][5] = { 0 };
    	test(arr);
    }
    
    1. 整型指针接收的应该是整型变量的地址,而二维数组数组名为首行的数组地址。
    2. 指针数组和二维数组无关。
    3. 二维数组传参用首行数组大小的数组指针接收。
    4. 二级指针和二维数组无关。
    • 二维数组数组名arr为首行“一维数组”的地址,数组的地址用数组指针接收。

    int(*)[5]型数组指针指向元素个数为5的一维数组。指针+1访问到下一行,每次跳一行。再解一层引用访问一行里每个元素。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^