二级指针和二维数组的问题 小白求助
多维数组名的本质是一个数组指针。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) ? #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是几级指针? 顶 一、a相当于&a,而 a + i = &a;
二、* (a + i) = 是存放 i 行的首地址的值,也是个地址;
三、* (a + i) + j 同(一)一样
四、一维数组可以使用*p代替 不知道理解的对不对
二维数组名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列的地址 问题为啥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}组成的数组是什么样子?不就是数组里有数组,不是二维数组吗? 4goodworld 发表于 2020-3-7 16:17
问题为啥a+i是二级指针 ?
你定义 int a,a是几级指针?指针的+-不改变它的级数。
谢谢大佬了 我看看 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]