IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言学习之指针这一概念的理解 -> 正文阅读

[C++知识库]C语言学习之指针这一概念的理解

要想成为c语言高手,指针必须拿捏。

本文主要讲讲我对指针的理解,如有错误,欢迎指正,不胜感激!

先把结论打出来:

? ? ? ? ? ? 通过指针这种方式 指向一个地址 对指针取内容 能够获得该地址的元素

下面是我的分析:

地址的引入:

例如:在codeblocks中

int a;? ?//声明一个整型变量??

?a=5;? ?// 初始化? ? ?? ? ? ? ? ? ? ? ??

那么操作系统便会在内存中,划分一块区域用来存储5。

该区域的大小由系统决定,在这里为int 类型占4字节

该区域的名字由程序员决定,该区域叫a

该区域 从首地址开始? ? 到尾地址结束? ?

问题1:?那地址这东西有什么用呢?程序员怎么知道该区域的首地址和尾地址? ? ???

分析:如果该区域大小和首地址确定了,那么尾地址就确定了,问题解决。

方法:C语言中,通过取地址符 &,我们能够知道a的首地址。

如下图:得到a的首地址

?

?

问题2:a=5;变量a的值我是知道的,但如果程序中声明了10000个整型变量并赋予初值,

? ? ? ?如:?int b=1,c=2,d=3,e=4,f=5,......m=10000;//声明变量

这么多的话,记不住啊,但是我想知道定义的任意一个变量的值,有没有什么方法能够解决呢

?????????????????????

哎,令人头大!.......Oh,发现了方法。

方法:C语言提供了? ? 取内容符号? *? ? ? ?? 可以获得变量的值

那我试试:

?

?

可以可以!!!

结论:通过&a,可以获得a的地址,通过 *?&a,可以得到a中的值。

引入指针:

因为通过地址可以访问变量的值,

那么C语言为了方便程序员间接访问变量,于是把通过地址查找变量的值 这种方式起了一个名字

它叫:? ? ? ? ? ? ? ? ? ? 指针??

作用:指向某个变量的地址? ???

如图:通过p指针访问a的地址

通过p指针访问a的地址

?

那么对于:

p=&a;//p指向a的地址?

那么两边同时取内容? ?是不是等价于*p=a;??????? 试试就知道

p指针取内容得到a的值

?

?不错,猜对了。

总结:通过指针这种方式 指向一个地址 对指针取内容 能够获得该地址的元素

补充:指针与内存的联系

1.建立内存的动态分配

malloc(100);?? ??? ?//开辟100字节的临时分配域,函数值为其第1个字节的地址

p=calloc(50,4);?? ??? ?//开辟50×4个字节的临时分配域,把首地址赋给指针变量p

realloc(p,50);?? ?//将p所指向的已分配的动态空间改为50字节

free(p); ?? ?//释放指针变量p所指向的已分配的动态空间

2.建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩。

#include<stdio.h>
#include <stdlib.h>
int main()
{
   void check(int *p);//函数声明,形参为整型指针变量
   int *p1,i;
   p1=(int *)malloc(5*sizeof(int));
   //开辟动态内存区,p1指向首地址
   for(i=0;i<5;i++)
      scanf("%d",p1+i);//输入学生成绩
   check(p1);
	return 0;
}
void check(int *p)//函数定义
{
   int i;
   printf("They are fail:\n");
   for(i=0;i<5;i++)
      if(p[i]<60) printf("%-5d",p[i]);
      //打印<60的成绩
   printf("\n");
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:33:49  更:2021-08-16 11:35:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:46:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码