让你不再害怕指针的应用-全程仿真+注解(第二部分:数组)(持续更新)

写此文章一是为了分享,二是为了温习!

预计包含的内容为:变量如int  、数组  、结构体  、枚举 、联合体、(这个自己也在了解)。

软件:CODE::Blocks      Compiler:GCC5.1.0

写第二部分就默认大家看了我写的之前的文章,那我就直接阐述我的观点和仿真结果!

重要的五句话:好好揣摩!

指针的值: 是它所指向对象的地址
           在指针前面使用*可以得到:指针所指向对象的值(简称:取内容)
           指针+1,指针的值递增它所“指向类型”的大小
           数组的指针:指的是:数组的起始地址。
           数组元素的指针:指:数组元素的地。

把数组的地址 赋给指针变量 :该指针就指向该数组了!

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<windows.h>
int b = 0;
int c ;
int main()
{int a[10] = {1,2,3,4,5,6,7,8,9,0};int *p_1,*p_2;p_1 = &a;//数组名就是改数组的首地址p_2 = &a[0];//取a的首地址,性质和上面一样。printf("p_1= %d\n",*p_1);printf("p_2= %d\n",*p_2);printf("a= %d\n",a);printf("取内容p_1= %d\n",*p_1);printf("去内容p_2= %d\n",*p_2);getch();
}

结果:

总结:由上面上来讲,取数组[0]的地址,取a的地址或者直接打印出来的都是一个地址,说明这三种方法都可以得到数组的地址!

为什么这么做呢?C Primer Plus书籍 有这么一句话我抄下来供阅读一下!

指针提供一种以符号的形式使用地址的方法。因为计算机的硬件指令非常依赖地址,指针在某种程度上把程序员想要表达的指令以更接近机器的方式表达。所以使用指针更有效率!

那么你就会发现一个问题,如果指针*(p_1+1),*(p_1+1) 取出来的内容是什么呢?是不是乱码还是自己想要的数据呢?

想要得到这个问题的答案,我们先看看指针(p_1+1),(p_1+1)打印出来的是什么呢?我还想表达另一个问题,故改了一下程序!

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<windows.h>
int b = 0;
int c ;
int main()
{int  a[3] = {1,2,3};double b[3] = {4,5,6};int  *p_1;double *p_2;p_1 = &a;//数组名就是改数组的首地址p_2 = &b;printf("p_1= %d\n",(p_1));//打印数组的首地址printf("p_2= %d\n",(p_2));printf("p_1+1= %d\n",(p_1+1));//打印指针指向的下一个地址printf("p_2+1= %d\n",(p_2+1));getch();
}

结果:

结论:p_1= 6356732 p_1+1= 6356736  p_1= 6356704  p_1+1= 6356712  ,一个int型的变量占用4个字节,一个double占用8个字节。之前是讲过的,不再赘述。说明指针指向下一个地址是可以确定的,为什么p_1+1指向的地不是6356733呢?也加1呢?

这么高深的问题,C Primer Plu书籍 来给你解答:我们的系统地址是按字节编地址的,在C语言中,指针+1指的是增加一个储存单元,int的储存单元是4个字节,那么pointer+1也就指向下一储存单元了。

这是为什么必须声明的所指向对象类型的原因之一。只知道地址不够,因为计算机要知道存储对象需要多少字节(即使指针所指向的是标量变量,也要知道变量的类型,否则*poiner+1就无法正确取回地址上的值。

明白了这个指针+的问题,我们开始取数组里面的内容,并且改变数组里面的值。那不是轻而易举,哈哈!看程序

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<windows.h>
int b = 0;
int c ;
int main()
{int  a[3] = {1,2,3};//初始化数组double b[3] = {4,5,6};int  *p_1;double *p_2;short i,j;p_1 = &a;//数组名就是改数组的首地址p_2 = &b;for(i=0;i<3;i++){*(p_1+i) = 100+(i*100);//循环修改数组元素的值}for(i=0;i<3;i++){*(p_2+i) = 400+(i*100);;//循环修改数组元素的值}for(i=0;i<3;i++){printf("p_1+%d= %d\n",i,*(p_1+i));//打印数组的数据}for(j=0;j<3;j++){printf("p_2+%d= %f\n",j,*(p_2+j));//打印数组的数据}getch();
}

结果:

最后我们了解数组的地址,和指向数组的指针的地址的递增方式,并也会运用指针取内容,改变变量的值。等等等,我这边没有涉及到取地址,因为取地址不是很难理解。

&a  取a的地址,这个地址指针可以指向这个地址;

哈哈,不难吧!

结语:

很多事情学会了就不难了,就比如初中生看小学的知识,高中看初中知识一样!

写文章,有很多不足之处,请体谅!我也是边学别用!

让你不再害怕指针的应用-全程仿真+注解(第二部分数组)相关推荐

  1. 让你不再害怕指针的应用-全程仿真+注解(第一部分:变量)

    让你不再害怕指针的应用-全程仿真+注解(第一部分:变量)(持续更新) 写此文章一是为了分享,二是为了温习! 预计包含的内容为:变量如int  .数组  .结构体  .枚举 .联合体.(这个自己也在了解 ...

  2. 让你不再害怕指针(一)

    2019独角兽企业重金招聘Python工程师标准>>> 你不再害怕指针 前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要 ...

  3. 让你不再害怕指针-摘自:无名

    让你不再害怕指针 认认真真看完本文,我坚信你会对指针会有全新的认识! 目录 前言:复杂类型说明 细说指针 1.指针所指向的类型 2.指针的值 3.指针本身所占据的内存区 指针的算术运算 运算符& ...

  4. 让你不再害怕指针.pdf

    今天推荐一本书,是讲解指针的,C 语言理解指针应该算一个重点,也算是一个难点,这个pdf 文章总结非常好,推荐给大家. 想获取书籍Pdf的同学,请在公众号后台回复 「指针」,希望这本书籍让你们不再害怕 ...

  5. 【C语言】让你不再害怕指针——C指针详解(经典,非常详细)

    目录 前言:复杂类型说明 一.细说指针 1.指针的类型 2.指针所指向的类型 3.指针的值----或者叫指针所指向的内存区或地址 4 指针本身所占据的内存区 二.指针的算术运算 三.运算符&和 ...

  6. 让你不再害怕指针——C指针详解(经典,非常详细)

    前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其 ...

  7. git 代理 git_如何不再害怕GIT

    git 代理 git 了解减少不确定性的机制 (Understanding the machinery to whittle away the uncertainty) 到底什么是Git? (What ...

  8. vim block vim_如何不再害怕Vim

    vim block vim 精选最流行的命令以及如何使用它们 (A curation of the most popular commands and how to use them) If you' ...

  9. javascript_如何不再害怕JavaScript

    javascript 成为一名出色的Javascript开发人员要知道的事情 (Things to know to be a great Javascript developer) Have you ...

最新文章

  1. python lambda_Python 匿名函数 lambda
  2. LA3177长城守卫
  3. 撕掉“丑”的标签,体素是如何让游戏更有趣的?
  4. mysql存储过程——procedure[prəˈsiːdʒər]
  5. tensorboard : 无法将“tensorboard”项识别为 cmdlet、函数、脚本文件或可运行 程序的名称。
  6. Jmeter函数助手
  7. VeriSign 通配型 SSL证书详解
  8. 机器学习分类模型评价指标和方法
  9. Nginx源码分析 - 实战篇 - 编写一个自定义的模块(24)
  10. windows本地上传文件到服务器(scp)
  11. 王菲微博“逗贫”语录暴光
  12. 5G助推全球新经济变革,十万亿产业研讨盛会等你来
  13. SwiftUI WWDC21 新绘图和动画组件之 01 Canvas 支持即时模式绘制的视图类型
  14. RedisTemplate常用操作工具类封装,实现一个函数添加,删除,更新及对应批量操作
  15. TFT-LCD制程之CF制程
  16. win10显卡驱动报错怎么办【系统天地】
  17. 雷军兼任小米汽车业务CEO、徐直军任华为轮值董事长 | 高管变动2021年3月29日-4月4日...
  18. RANSAC算法的单应性矩阵讲解
  19. Oracle表查询优化思路
  20. mysql数据库的密码破解/用户授权/备份/图形化管理工具phpmyadmin

热门文章

  1. Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal
  2. 网络模型和TCP协议族
  3. 上传文件按钮美化,上传文件前后状态控制
  4. Web前端入门学习(5)——浮动原理及清除浮动
  5. PHP Learning every day
  6. 创建 Robotium 测试工程
  7. js 图形化工作流设计器
  8. VIVOtech:使用近场通信(NFC)技术的免接触付款解决方案的市场领导者
  9. 工作是老板的,生命是自己的。
  10. windows XP下DCOM的权限配置