C语言指针入门知识
C语言指针往往是C语言学习过程中最困难的地方, 最近重新理解了一下C语言的指针知识, 在此整理一下, 如果有错误请留言指正.
对于刚入门的人来说, 指针涉及方方面面, 从简单的数组到结构体, 都会用到指针.
指针根据应用不同的地方, 功能也是不同的, 在此尽量以最简单的方式进行叙述.
一. 指针基础知识
指针应用主要分为两个方面, 一是定义阶段. 另一个是使用阶段.
1. 定义阶段
int *p;
这里表示定义了一个int型指针, 即*p指向内存中一块地址, 占用4个字节(后面会进行解释4字节, 但是简单一提是int类型占用4字节, double占用8字节).
int a=1;int *p=&a;
此处与上面不同的地方是在定义指针的同时, 将其指向的地址赋初值为1, 即将*p指向的地址存入int类型的数且该数为1.
2. 使用阶段
*p=;
前面已经定义了int型的指针, 且指针指向的地址赋初值为1. 这里想把*p指向的地址中的值赋为2, 则使用*p=2.
这里比较混乱的地方是下面这种情况:
*p //表示操作*p中的数值, 即*p为一个数值 p //表示地址, 及地址号
这里一定要区分明白*p
二. &的说明
在指针的使用过程中还要注意的一个符号就是&, 这个&符号表示寻找地址. 使用方法如下:
;
int *p=&a; //这里&表示寻找到a的地址, 并将其赋给指针p
printf("%d\n",*p); //输出2
这一段代码可以这么理解, 定义一个int型指针, 改指针指向了a变量的地址, 所以最后printf的过程最后寻找到变量a的地址然后输出.
三. 指针在数组中使用
这里再给出数组中指针的简单实用, 代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
]={,}; //定义数组a(0)=111, a(1)=999. 目的是便于区分输出值
int *p; //定义int指针p
p=a; //将数组a的首地址给指针p
printf("%d\n",*p); //输出111
printf());//输出999, 因为此时指针p指向a(1)的地址
;
}
下面代码涉及指针的移动问题:
#include <stdio.h>
#include <stdlib.h>
int main()
{
;
int *p;
p=&a;
printf("%#X\n",p); //十六进制输出p的地址, 我的机器输出OX28FF14
printf()); //输出OX28FF18
double b=99.9;
double *q=&b;
printf("%#X\n",q); //输出OX28FF08
printf()); //输出OX28FF10
;
}
这里int与double地址输出的值不同, 原因是int和double占用的字节数不同. int占用4字节, double占用8字节, 所以当int型指针+1移动时实际移动4个字节的地址, 而double则移动8个字节的地址. 可以类比到float与char类型.
字符串在此不解释, 可以当做特殊数组进行处理.
四. 错误示例解析
下面给出一些错误示例
; //出错原因指针未指向明确的地址就赋值//此段代码等价int *p;p=1; //前面说过p为地址, 这里给地址赋值为1.
int *p; //原因同上 *p=;
转载请注明出处, O(∩_∩)O谢谢!
C语言指针入门知识的更多相关文章
- C语言指针基本知识
对程序进行编译的时候,系统会把变量分配在内存单位中,根据不同的变量类型,分配不同的字节大小.比如int整型变量分配4个字节,char字符型变量分配1个字节等等.被分配在内存的变量,可以通过地址去找到, ...
- C语言指针入门
指针指包含地址 声明指针: int num:声明整数 int *num:声明指针,下面的声明也是等价的,空格的使用指示个人爱好 int* num; int * num; int *num; in ...
- C语言指针和数组知识总结(上)
C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是: %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...
- 用几分钟了解R语言入门知识
第一篇——用几分钟了解R语言入门知识 第二篇——用几分钟了解R语言入门知识(续) 关于数据分析学习笔记的计划(以及目录)
- C语言入门---第九章 C语言指针
没学指针就是没学C语言! 指针是C语言的精华,也是C语言的难点. 所谓指针,也就是内存的地址,所谓指针变量,也就是保存了内存地址的变量.不过人们往往不会区分两者的概念,而是混淆在一起使用. ===== ...
- c语言快速入门3
如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 c语言快速入门2 3.4.1 字符和字符串 字符:'' 单个 ...
- linux 操作系统下c语言编程入门
2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 ...
- go语言快速入门教程
go快速入门指南 by 小强,2019-06-13 go语言是目前非常火热的语言,广泛应用于服务器端,云计算,kubernetes容器编排等领域.它是一种开源的编译型程序设计语言,支持并发.垃圾回收机 ...
- Scheme语言实例入门--怎样写一个“新型冠状病毒感染风险检测程序”
小学生都能用的编程语言 2020的春季中小学受疫情影响,一直还没有开学,孩子宅在家说想做一个学校要求的研究项目,我就说你做一个怎么样通过编程来学习数学的小项目吧,用最简单的计算机语言来解决小学数学问题 ...
随机推荐
- C++静态库与动态库深入研究
什么是库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可以被操 ...
- Resharper 8.2的“安装”问题
概述 完美解决Resharper 8.2的“安装”问题和VS2012写Javascript语句无法智能提示的问题: 目录 引言——Resharper 简介——安装——VS2012智能提示测试 引言 最 ...
- CSS3中的动画效果-------Day72
还记得么,在前面也曾实现过"仅仅用css让div动起来",还记得当时是怎么实现的么,是的,transition,针对的也比較局限,仅仅有旋转角度啊,长宽啊之类的,所以说,与其说是动 ...
- window 平台搭建简单的直播点播系统
Windows平台如何搭建简单的直播系统前文已经有介绍,今天介绍下如何搭建简单的点播系统. 同样还是利用crtmpServer,crtmpServer可以从github中下载,可以从群里下载(群里有修 ...
- javacript中apply和call的区别
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. 接受的参数是一个字符串. call:和apply的意思一样,只不过是参数列表不一样. 接收的参数是一个数组. 例如: <s ...
- 储存技术(SLC、MLC、TLC和QLC的NAND闪存技术)和Optane Memory
1.转载:Optane Memory 2.构成SSD的主要IC有主控芯片和NAND闪存,SLC.MLC和TLC三者都是闪存的类型 需要说明的闪存的寿命指的是写入(擦写)的次数,不是读出的次数,因为读取 ...
- 2.Qt Creator的使用
下面以一个简单的程序来说明Qt Creator的使用: 首先,按图片步骤创建一个Qt项目 创建完成后 上图标记处工具栏提供了简化树形视图.分栏等功能(自行尝试吧...) 在使用Qt制作一个界面时,我们 ...
- Linux多线程编程的条件变量
在stackoverflow上看到一关于多线程条件变量的问题,题主问道:什么时候会用到条件变量,mutex还不够吗?有个叫slowjelj的人做了很好的回答,我再看这个哥们其他话题的一些回答,感觉水平 ...
- JS 常用字符串操作
Js字符串操作函数大全 /******************************************* 字符串函数扩充 ...
- caffe配置Makefile.config----ubuntu16.04--重点是matlab的编译
来源: http://blog.csdn.net/daaikuaichuan/article/details/61414219 配置Makefile.config(参考:http://blog.csd ...