C语言——初见指针
- 指针
指针是存放变量地址的变量。
由此我们可以知道了,指针存放的是变量地址且只能应用于内存中对象,指针本身也是一个变量。但是指针不仅仅可以存储变量地址,还可以是其他例如函数指针。
C语言程序运行时,内存主要分为这几个部分
- 只读存储区———存储程序本身的机器码和常量
- 静态存储区————全局变量和静态变量
- 动态存储区————堆和栈
好像和要说的指针关系不是很大。
- 指针声明
指针使用 [类型关键字] [变量名] 这样的方式进行定义。eg:int *a;定义了一个指针,指针名叫a,可以存储任意int型变量的地址。类型关键字是指针所指内存存储的数据类型。
现在来认识两个一元操作符& *,&是取地址运算符,作用是返回变量的地址。*是简介寻址运算符,返回操作数指定地址的值。在我用的c语言程序设计教材里面并没有详细介绍这两个操作符。
认识了这两个操作符,现在我们可以来进行一些操作了,如下代码;
int a,c; //定义变量a,c
int *b; //定义指针b
a = ; //现在a=1
b = &a; //b指向a
c=*b; //c现在等于1
*b = ; //a现在等于5
b = & c; //b现在指向c
*b = ; // c现在等于0
#include <stdio.h>
#include <stdlib.h> main()
{
int *p=NULL,q=;
p = &q;
printf("Address:%p\n",&q);
printf("Address:%d\n",q);
printf("Address:%p\n",p);
printf("Address:%d\n",p);
printf("Address:%p\n",*p);
printf("Address:%d\n",*p); }
运行结果如下: Address:0060FEF8
Address:
Address:0060FEF8
Address:
Address:
Address:
由于指针直接对内存操作,所以,要清楚每一个指针指向何处,进行什么操作。空指针是危险的,所以当指针没有指向任何地方,需要使用标准库提供的NULL进行初始化。
指针可以用void 声明,我之前想用void的指针printf一个变量,但是编译器报错了。网上说void 不指定类型的指针可以指向任何累心的地址,我在coudblocks测试是可以,但是输出报错,如果用另一个指定类型的指针再指向这个void的指针,就可以不报错输出。我对于这个void有点迷,看不懂。
找了半天,这个类型转换我还有点懵,啥也不写了,先写这么多吧。
C语言——初见指针的更多相关文章
- 浅谈c语言的指针
对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- C语言二重指针与malloc
(内容主要源于网上,只是加入了些自己的剖析) 假设有一个二重指针: char **p; 同时有一个指针数组 char *name[4]; 如何引用p呢? 首先我们有程序代码如下 #include &l ...
- C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...
- 为什么C/C++语言使用指针
这是参加面试时,面试官问的一道开放性题目. 问题是:为什么C/C++语言使用指针? 这个问题一问出来,直接被面试官秒杀了,面试官大神,你怎么不按套路出牌啊? 说好的malloc和new的区别呢?说好的 ...
- C语言的指针变量
C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...
- “对外部(局部)变量的访问”是C语言函数指针的最大弱点
1.“对外部(局部)变量的访问”是C语言函数指针的最大弱点 . #include <stdio.h> #include <stdlib.h> /* 结构体定义 */ struc ...
- go语言学习--指针的理解
Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,array/slice,map,chan, fu ...
随机推荐
- Python 列表生成式 & 字典生成式
Python 列表生成式 & 字典生成式 通过生成式可以更加简洁地生成列表和字典 列表生成式 对比 直接生成数据后加入列表示例: user_list = list() for i in ran ...
- rsync的简介及使用
1.rsync的基础概述 1.什么是备份 相当于给源文件增加一个副本,但是备份只会备份当前状态的数据,当你在写数据是,不会备份新写入的数据,除非自己手动在备份一次. 2.为什么要做备份 1.需要备份一 ...
- 修改SQL Server中的计算机名
安装SQL Server之后,如果修改计算机名会导致登录异常,或者某些功能不能用,例如配置Replication时会提示如下错误: SQL Server replication requires th ...
- luogu5823 课表的排列
题目链接 problem 构造一个长度为\(2n\)的数列.满足: 1.[1,n]中每个数字恰好出现两次. 2.将所有相同数字之间相隔的数字个数排序后,得到公差为1的等差数列. 保证n为奇数. sol ...
- eclipse中的clean操作
在eclipse中写JavaWeb项目时,有时候会出现代码修改了,但是执行的效果还是修改之前的,这时候clean一下就会解决问题 1.clean操作 Project---->clean---&g ...
- 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章 STM32H7的USART串口基础知识和 ...
- IT兄弟连 HTML5教程 HTML5的曲折发展过程 HTML5的诞生
十年磨一剑,正如我们所看到的一样,HTML5大潮正来势汹汹.但也正如我们所知道的一样,HTML5是一种技术标准,它的语义之美.人性之美.简单之美.实用之美……如同一场革命,它的主要应用场景是浏览器,不 ...
- Numpy数值类型与数值运算-03
什么是NumPy? NumPy是Python中科学计算的基本软件包.它是一个Python库,提供多维数组对象,各种派生对象(例如蒙版数组和矩阵) 以及各种例程,用于对数组进行快速操作,包括数学,逻辑, ...
- .NET MVC5简介(三)Result
Ajax请求数据响应格式,一个醒目组必须是同意的,前端才知道怎么应付,还有很多其他情况,比如异常了,有ExceptionFilter,按照固定格式返回,比如没有权限,Authorization,按照固 ...
- JDK1.8新特性——Collector接口和Collectors工具类
JDK1.8新特性——Collector接口和Collectors工具类 摘要:本文主要学习了在Java1.8中新增的Collector接口和Collectors工具类,以及使用它们在处理集合时的改进 ...