琴长不过时光 发表于 2020-3-7 12:33:19

二级指针和二维数组的问题 小白求助

多维数组名的本质是一个数组指针。
int a

第i行首元素地址和整个第i行的地址是重叠的
a+i              二级指针整个第i行的地址
*(a+i)    一级指针第i行的首元素地址
*(a+i)+j第i行第j列的地址 相当于&a


问题为啥a+i是二级指针 ?   为啥*(a+i)是一级指针? 为啥*(a+i)+j代表第i行第j列的地址?
为啥二维数组名a 相当于函数指针int(*p)   ?

琴长不过时光 发表于 2020-3-7 12:36:15

#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

void main()
{
        int i;
        int j;
        int tmp = 1;
        int a;
        {
                int(*pArr);
                pArr = a;
                for (i = 0; i < 3; i++)
                {
                        for (j = 0; j < 5; j++)
                        {
                                pArr = tmp++;
                        }
                }
                for (i = 0; i < 3; i++)
                {
                        for (j = 0; j < 5; j++)
                        {
                                printf("%d ",pArr);
                        }
                }
                printf("\n");
        }
        system("pause");
}

问题2 :这个pArr是几级指针?

琴长不过时光 发表于 2020-3-7 13:17:53

_谪仙 发表于 2020-3-7 14:47:20

一、a相当于&a,而 a + i = &a;
二、* (a + i) = 是存放 i 行的首地址的值,也是个地址;
三、* (a + i) + j 同(一)一样
四、一维数组可以使用*p代替

兄弟来学习 发表于 2020-3-7 14:55:45

不知道理解的对不对
二维数组名a存放数组首元素的地址为&a             a+i等效于&a
*(a+i)的值为aa存放于值为&a   *a就能打出每行首位元素的值   所以a+i为二级指针

*(a+i)+j相当于&a   

函数指针int(*p) 指向包括5个元素的一维数组的变量p常用于接收数组名a或第一个元素的地址 &a
p的值就是该一维数组的起始地址 *p数组包括 (*P),(*P)等,作用效果跟二维数组名差不多

因为a+i和&a指向行,对其加减时,作用范围为一行(跨越一行的元素)的加减
      *(a+i)和a指向列,对其加减时,作用范围为一列(跨越一个元素)的加减,所以*(a+i)+j代表第i行第j列的地址

4goodworld 发表于 2020-3-7 16:17:34

问题为啥a+i是二级指针 ?   

你定义 int a,a是几级指针?指针的+-不改变它的级数。

为啥*(a+i)是一级指针?

这个必须要完成第一个提问,如果a是一个二级指针,你已经认可了,那么*a是不是取a指针存储的值(其实这个值还是一个内存地址,也是一个指针,当然,是一级指针),

为啥*(a+i)+j代表第i行第j列的地址?

这个问题得基于上一个问题,既然 *(a+i)是一个一级指针,一级指针偏移 j个位置,它所存储的不还是一个地址吗?至于 第i行第j列 还不是你的设定的

为啥二维数组名a 相当于函数指针int(*p)   ?

*p能不能代表一个数组,类似*p={1,2,3},如果你能理解这个感觉,那么 5个{1,2,3}组成的数组是什么样子?不就是数组里有数组,不是二维数组吗?

琴长不过时光 发表于 2020-3-7 20:02:52

4goodworld 发表于 2020-3-7 16:17
问题为啥a+i是二级指针 ?   

你定义 int a,a是几级指针?指针的+-不改变它的级数。


谢谢大佬了 我看看

琴长不过时光 发表于 2020-3-8 10:59:12

4goodworld 发表于 2020-3-7 16:17
问题为啥a+i是二级指针 ?   

你定义 int a,a是几级指针?指针的+-不改变它的级数。


#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

void getStr(char* myp, char c, charbuf)//问题 为啥这里char*myp 用一级指针?啥时候用二级的?
{
        int i;
        if (myp == NULL)
        {
                return;
        }
        int count = 0;
        int e = 0;
        for (i = 0; myp; i++)
        {
                if (myp != c)
                {
                        buf = myp;
                        buf = '\0';
                }
                else
                {
                        count++;
                        e = 0;
                }
        }

}

void main()
{
        int i;
        int j;
        char* p = "abcdef,acccd,eeee,aaaa,e3eeeee,sssss";
        char c = ',';
        char buf;
        getStr(p, c, buf);
        for (i = 0; i < 6; ++i)
        {
                printf("%s\n", buf);
        }
        system("pause");
}
页: [1]
查看完整版本: 二级指针和二维数组的问题 小白求助