鱼C论坛

 找回密码
 立即注册
查看: 1038|回复: 9

[已解决]关于指针和数组关系不理解的地方

[复制链接]
发表于 2020-3-7 20:30:16 | 显示全部楼层 |阅读模式
20鱼币
#include <stdio.h>
int main()
{
    int num[] = {1,2,3,4,5};
    int* p = num;//数组名是数组的首地址

    for(int i = 0; i < 5; i++)
    {
        printf("%d ",p[i]); //这里想不通,该怎样理解?
    }
    return 0;
}

输出结果为:1 2 3 4 5

最佳答案
2020-3-7 20:30:17
本帖最后由 4goodworld 于 2020-3-7 22:05 编辑
〃忝書γě渎ぐ 发表于 2020-3-7 21:25
大佬,我就是想知道指针那部该如何理解?

我简单示意下效果,如下面的表格样子

i=0,p[0]的状态:
1 2 3 45
指针起初在这个位置↑


i=1,p[1]的状态:
1 2 3 45
指针第二步在这个位置↑

i=2,p[2]的状态:
1 2 3 45
指针第三步在这个位置↑

等等……
就这样依次类推,往下偏移,指到那儿,打印出该位置的值

最佳答案

查看完整内容

我简单示意下效果,如下面的表格样子 i=0,p[0]的状态: i=1,p[1]的状态: i=2,p[2]的状态: 等等…… 就这样依次类推,往下偏移,指到那儿,打印出该位置的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 20:30:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 4goodworld 于 2020-3-7 22:05 编辑
〃忝書γě渎ぐ 发表于 2020-3-7 21:25
大佬,我就是想知道指针那部该如何理解?

我简单示意下效果,如下面的表格样子

i=0,p[0]的状态:
1 2 3 45
指针起初在这个位置↑


i=1,p[1]的状态:
1 2 3 45
指针第二步在这个位置↑

i=2,p[2]的状态:
1 2 3 45
指针第三步在这个位置↑

等等……
就这样依次类推,往下偏移,指到那儿,打印出该位置的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 20:48:38 | 显示全部楼层
本帖最后由 墨羽岚 于 2020-3-7 21:00 编辑

调用库函数<stdio.h>
定义整型函数main
{
        定义一个整型数组num并将1,2,3,4,5这5个数字赋予其中;
        定义一个整型数组p,通过指针将num中的元素传递给p;

        定义一个整数i并把0赋初值给i,当i<5时执行以下循环体;并在每次执行后将i加1重新赋予给i;
        {
                输出p中i为下标的元素(p[0]为1,以此类推)并在其后加上一个空格;
        }
        返回值为0;       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-7 20:54:55 | 显示全部楼层
墨羽岚 发表于 2020-3-7 20:48
就是将num数组里的值全部给p后再从最开始依次输出鸭

看结果我也能猜出,就是不知具体该如何理解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 21:01:14 | 显示全部楼层
〃忝書γě渎ぐ 发表于 2020-3-7 20:54
看结果我也能猜出,就是不知具体该如何理解。

我修改了我的评论,你看看能不能帮上你的忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 21:14:19 | 显示全部楼层
1.关于循环

for 循环的一般形式为:
for(表达式1; 表达式2; 表达式3){
    语句块
}

它的运行过程为:
1) 先执行“表达式1”。

2) 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。

3) 执行完循环体后再执行“表达式3”。

4) 重复执行步骤 2) 和 3),直到“表达式2”的值为假,就结束循环。

上面的步骤中,2) 和 3) 是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。

“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。

                               
登录/注册后可看大图

2.关于索引

数组的索引是从0开始

希望对你有所帮助

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-7 21:25:43 | 显示全部楼层
dlnb526 发表于 2020-3-7 21:14
1.关于循环

for 循环的一般形式为:

大佬,我就是想知道指针那部该如何理解?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-7 21:26:14 | 显示全部楼层
dlnb526 发表于 2020-3-7 21:14
1.关于循环

for 循环的一般形式为:

指针为什么能做为数组呢,在C语言标准中有什么类似的标准是如何说的呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 21:34:56 | 显示全部楼层
〃忝書γě渎ぐ 发表于 2020-3-7 21:26
指针为什么能做为数组呢,在C语言标准中有什么类似的标准是如何说的呢。


emmm 这个问题

编译器会自动判断你是取指针还是取值!!
我不知道C语言标准里有没有相应的说明。

若果你的指针是索引形式,他就知道这是取索引值
如果你觉得很懵逼,可以用 p++ 的方法~
我也觉得这种方式很奇怪,但是有指针的语言编译器大多都支持这个特性~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-7 21:54:49 | 显示全部楼层
墨羽岚 发表于 2020-3-7 20:48
调用库函数
定义整型函数main
{

就是不知p[0]; 这条的理解支撑,指针是怎么被当成数组的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 00:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表