Juniorboy 发表于 2020-5-2 12:16:04

指针数组,数组指针。

#include <stdio.h>

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

      printf("%d\n", *(*(p+1)-6));

      return 0;
}

指针 p 指向数组 array 的地址,p + 1 便是指向整个数组最后的位置(第二个 array 数组的起始位置),于是 *(p+1) 即下一个数组 array 数组的起始位置,即 &array,所以 *(*(p+1)-6) == array = array。这一段是小甲鱼说的话。

我的问题;
问题一:第二个array数组的起始位置是什么,是再一次循环回来了吗,还是有一次起了一个数组,那这个第二个数组怎么出来的呢?

问题二:*(p+1)是取值啊,是应该第二个数组的第一个元素的的值啊,怎么就等于了11?

问题三:
int temp = {1,2,3,4,5};
int (*p2) = &temp;
int i;

for (i=0;i<5;i++)
{
printf("%d\n",*(p2+i));
}
如果按照这个想法去想这个代码的话,那就不能打印出来1,2,3,4,5 了啊,因为*(p2+i)当i=1是就到了第二个数组了。求解,谢谢。

永恒的蓝色梦想 发表于 2020-5-2 12:25:54

领鱼币

jkluoling1992 发表于 2020-5-2 12:44:28

本帖最后由 jkluoling1992 于 2020-5-2 13:14 编辑

*(p+1) 应该是&array,index 为10 , -6最后得到的是arra, 这里描述的是index,
11指的是数组空间中连续排列的内存中第11个int类型的数,没定义就是一个非法值

徘徊浅行 发表于 2020-5-2 13:10:39

回帖能领鱼币?

skyddy 发表于 2020-5-2 14:23:11

徘徊浅行 发表于 2020-5-2 13:10
回帖能领鱼币?

不知道是回的好能领,还是有概率性

徘徊浅行 发表于 2020-5-2 14:33:43

怎么讲吧
你这个是一维数组,p+1这个指针就不指向这个数组了,指针直接跨过这个数组
解一:
定义二个维数组;{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ;假如9元素的地址是1004;那么int占4个字节,
下一个数组的首地址就是1008;
解二:
因为int (*p)这是一个指向(数组的地址),不是指向数组第一个元素的地址;*(p+1)得到的是array数组里最后一个元素(9)地址+sizeof(int)
字节的地址;
解三:
对,因为这个指针已经不指向这个数组了,一大步直接偏移20个字节了
建议优化代码
        int temp = { 1, 2, 3, 4, 5 };
                int(*p2) = &temp;
                int i;

                for (i = 0; i<5; i++)
                {
                        printf("%d\n", **(p2)+i);
                }

sunrise085 发表于 2020-5-2 15:59:50

可以看看这个帖子,是我以前回答的。里面还有个链接也是我回答的。应该能帮你解惑
这两个帖子中都有几个回答,不在一个楼层。

Juniorboy 发表于 2020-5-2 18:00:36

sunrise085 发表于 2020-5-2 15:59
可以看看这个帖子,是我以前回答的。里面还有个链接也是我回答的。应该能帮你解惑
这两个帖子中都有几个回 ...

我在您回复的贴子上回复您了

Juniorboy 发表于 2020-5-2 19:10:39

徘徊浅行 发表于 2020-5-2 14:33
怎么讲吧
你这个是一维数组,p+1这个指针就不指向这个数组了,指针直接跨过这个数组
解一:


请问这个*号,什么时候是表示指针变量的标识符,什么时候是取值啊。
之前有一个程序是这样的
char a = ‘f’;
char *pa = &a;这条语句和pa = &a有什么区别呢

int a = 123;
int *pa = &a和pa = &a又有什么区别呢
*pa 表示指针变量还是pa表示指针呢,pa = &a是把a的地址赋给指针变量,蒙了呀,求解,谢谢。

徘徊浅行 发表于 2020-5-2 20:26:10

简单的
*号前面有数据类型 后面的就是指针
例:int* a;double* b;
*号的前面有数据类型,a和b就是指针变量,没有初始化的指针变量;
int intNum=51;//定义一个整型变量
a=&intNum;//指针变量a 保存整型变量intNum的地址 就是a这个指针指向了intNum;
*a=666;//这里的*a 就是对intNum的赋值;

int a = 123;
int *pa = &a和pa = &a又有什么区别呢<<--int8pa=&a定义的时候初始化,相当于int a=123;这个 pa=&a;就是int a;然后a=123;这样
*pa 表示指针变量还是pa表示指针呢,<<-(两个都是指针变量,前者就是定义出来,后者已经定义好了);
pa = &a是把a的地址赋给指针变量,<<--对的;   蒙了呀,求解,谢谢。

jkluoling1992 发表于 2020-5-2 20:27:23

Juniorboy 发表于 2020-5-2 19:10
请问这个*号,什么时候是表示指针变量的标识符,什么时候是取值啊。
之前有一个程序是这样的
char a =...

类类型 * 变量名,这个是定义指针变量,
单独对一个变量名前加*就是取指针指向的值
页: [1]
查看完整版本: 指针数组,数组指针。