学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

1246

积分

6

好友

46

主题
发表于 2019-5-15 20:36:58 | 查看: 10816| 回复: 2

C语言快速入门系列-0(前言部分)
C语言快速入门系列-1(初识C)
C语言快速入门系列-2(编程环境)
C语言快速入门系列-3(第一个程序)
C语言快速入门系列-4(认识变量)
C语言快速入门系列-5(运算符)
C语言快速入门系列-6(数组)
C语言快速入门系列-7(条件判断)
C语言快速入门系列-8(for循环)
C语言快速入门系列-9(while循环)
C语言快速入门系列-10(函数)
==================================================================================================================
今天给大家讲的是C语言中指针的相关的知识,指针这一节是比较重要的,它在后面的编程中基本上会经常性的出现,尤其是到了结构体那里,指针是必不可少的,所以大家一定要在课下好好的理解一下指针的用法何作用。
这里呢我就带着大家对指针做简要的理解和学习,要想深入的学习指针的作用仅仅靠这里的一篇文章是远远不够的,还需要大家在平时多加练习和学习更深的相关知识,在这里只是对大家的一个入门引导。
那我们就开始正题。
我们还是以一个简单的例子作为引入,可能是我的习惯的事,基本上每讲一个新的东西我都是用一个实际的例子来做引入,不过这样也比较不错可以更好的来给大家做讲解。

#include<stdio.h>
int main()
{
        int *p,*d;
        int a,c[5];
        a=5;
        p=&a;
        for(int i=0;i<5;i++)
        {
                scanf("%d",&c[i]);
        }
        d=c;
        printf("d=%d\n",d);
        printf("*d=%d\n",*d);
        printf("p=%d\n",p);
        printf("*p=%d\n",*p);
        printf("a=%d\n",a);
        for(int i=0;i<5;i++)
        {
                printf("for循环 %d\t",c[i]);
        }
        printf("\n");
        for(int i=0;i<5;i++)
        {
                printf("*for循环 %d\t",*(c+i));
        }
        return 0;
}


程序的运行结果如下:
723105cdc068928b68.png

首先我们了解一下指针变量,指针变量是保存指针类型的变量,说白了就是变量的地址,也就是指针变量里面保存的是数据的地址。
Int *p,*d;这句是什么意思呢,他仍然跟我们之前介绍的一样,是一个变量定义的语句,只不过这里的变量定义的是带有*号标记的,它代表的是这声明了两个指针变量p、d
&:这个符号代表什么意思呢,之前也跟大家说过这个符号的作用,它是取地址符,通过它的运算可以获得变量的地址。
P=&a;:这个语句的功能就是获得变量a的地址然后将其保存在p这个指针变量里吗,(上面已经给大家说过指针变量保存的是地址)
printf("d=%d\n",d);
printf("*d=%d\n",*d);
printf("p=%d\n",p);
printf("*p=%d\n",*p);
printf("a=%d\n",a);
这些就是数据的输出,我们通过运行结果可以看到,直接输出指针类型的p和d的话会出现乱数,这是为什么呢?这是因为如果你直接输出p和d的话输出的是指针变量里面保存的地址,也就是说你输出的不是你期望的数据,而是你期望的数据在内存中保存的地址,那么我们怎么样才能输出期望的数据呢。往下看。
*:指针运算符,它的作用和&取地址符的作用是完全相反的,也就是是&运算符的一个逆的过程,&是用来取地址而*则是用来获取地址对应的数据,很显然我们通过*p和*d就可以成功的将数据给输出。
然后我们来看这一行语句。
d=c:这句是什么意思呢,这句是将c赋值给d,d是一个指针变量,应该是个地址,那么为什么可以将数组的名字直接赋给它呢?这是因为数组的名字就代表数组的首地址,这也就等价于&c[0],是数组的首个元素的地址,所以既然是地址那么就可以自然而然的赋值给指针变量了。

再向下是两个for循环,这两个for循环的作用是什么呢?
我们会发现这两个for循环的执行结果是完全一样的(当然,除了前面的用于区别的*号字符),我们会发现第二个for循环是用的*(c+i)进行的输出,为什么可以达到和c同样的效果呢??还记的我上面给大家说的c是数组的首地址吗?如果首地址+i那么就代表的意思是获得第i的数组的地址,也就是等价于&c。既然这样的话那就变的非常好理解了,那么*(c+i)就可以等价于*(&c),不就是c嘛。所以输出的结果是一样的。
因此我们就获得了一个非常好的办发,那就是通过对指针进行+i的操作和以获得第i个位置的数据*(c+i),这中操作对我们以后的编程中是非常的有用的。
好了指针就讲到这里你也就入门了,更多的指针的巧妙操作还需要大家再平时的学习中不断地积累和学习。

任务:
指针进行练习
温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
发表于 2019-5-15 23:38:09
以后代码尽量用pre来包括,这样有高亮更美观
发表于 2020-3-23 11:07:02
看了LZ的帖子,我只想说一句很好很强大!

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-11-22 06:40 , Processed in 0.127241 second(s), 50 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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