用来存放一个变量地址的变量就叫指针变量。指针变量也是有类型约束的,一般什么类型的指针指向什么类型的变量。

指针之所以叫变量,是因为它里面所存放的变量的地址也是不断变化的,指针是可以移动的。

定义格式:

类型名 *指针变量名  eg:int *pi;

指针的作用都是一样的,都是用来存放地址的,为什么还要区分类型,因为指针变量只能存放特定定义类型的变量。

让指针存放一个变量的地址:

pi=&a;

&叫取址符,*叫指针运算符。

还有一种能存放指针变量地址的对象,他就是指向指针的指针。eg:int **p ; p=&s

给指针变量赋值:

1、通过求地址运算符(&)获得地址值

int k=1,*q,*p;

赋值语句为:q=&k;则把k的地址赋予了q,可以说变量q指向了变量k

注意:1、&只能用于变量和数组,不可以用于表达式、常量和被说明为register的变量,因此:q=&k+1 q=&(k+1)都是错误的。

2、&必须放在运算对象的左边,而且运算对象的类型必须与指针变量的类型相同。

2、通过指针变量获得地址值

可以通过赋值运算,把一个指针变量中的地址赋予另一个指针变量,从而使这两个指针指向同一个地址。

int k,*q,*p;   q=&k ;p=q;

也就是说指针变量q和p都指向了变量k.

注意:当进行赋值运算时,赋值号两边的指针变量的基类型必须相同。

3、给指针变量赋空值

除了给指针变量赋地址值外,还可以给指针变量赋NULL值 。

eg:p=NULL;

当之真理上述语句之后,称p为空指针,NULL的代码值为0,等价于p='\0';p=0;

注意:p并不是指向地址为0的存储单元,而是一个有确定的值“空” int *p  ; int *p=null;

对指针变量的操作:

1、通过指针来引用一个存储单元

C语言提供了一个称作“间接访问运算符”,的单目运算符

【C语言学习笔记】指针的更多相关文章

  1. c语言学习笔记 - 指针和字符串

    前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...

  2. c语言学习笔记 - 指针和数组

    结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...

  3. c语言学习笔记.指针.

    指针: 一个变量,其值为另一个变量的地址,即,内存位置的直接地址. 声明: int *ptr; /* 一个整型的指针,指针指向的类型是整型 */ double *ptr; /* 一个 double 型 ...

  4. C语言学习笔记--指针阅读技巧

    1. 指针阅读技巧:右左法则 (1)从最里层的圆括号中未定义的标示符看起 (2)首先往右看,再往左看 (3)遇到圆括号或方括号时可以确定部分类型,并调转方向 (4)重复 2.3 步骤,直到阅读结束 注 ...

  5. C语言学习笔记--指针和数组的关系

    1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...

  6. C语言学习笔记--指针概念

    指针也是一种变量,占有内存空间,用来保存内存地址,在32位系统中指针的占用的内存大小为4个字节 1.*号的意义 (1)在指针声明时,*号表示所声明的变量为指针 (2)在指针使用时,*号表示取指针所指向 ...

  7. C语言学习笔记--指针与字符串

    字符类型 char(character)是一种整数,也是一种特殊的类型:字符.这是因为 ① 用单引号表示的字符字符字面量:‘a’,'1' ②‘’也是一个字符 ③printf和scanf里用%c来输入. ...

  8. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  9. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  10. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

随机推荐

  1. ASP.NET Core IIS发布

    ASP.NET Core应用发布到IIS 官网教程地址:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?vi ...

  2. Python渗透测试工具库

    漏洞及渗透练习平台 WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.com ...

  3. Windows 10 蓝牙管理页面"添加蓝牙或其他设备"选项点击无响应的解决方案

    解决方案1(简单,但不解决根本问题): 通过"控制面板→设备和打印机→添加设备"进行添加. 解决方案2: 造成这种现象的原因应该是因为启用了 Administrator 账户,在其 ...

  4. Android 自定义ListView动态加载数据

    我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分 ...

  5. PHP 格式化显示时间 date() 函数【转】

    date() 函数 功能:用于格式化时间,返回一个字符串.  语法:string date( string format [, int timestamp] ),其中参数 format 表示时间格式化 ...

  6. 浅析Volatile关键字

    浅析Volatile关键字 在java中线程并发中,线程之间通信方式分为两种:共享内存和消息传递.共享内存指的是多个线程之间共享内存的属性状态:消息传递指的是线程之间发送信息来通信.在介绍volati ...

  7. windows环境安装rabbitmq

    (1)下载并安装 Eralng 如:otp_win64_20.2.exe (以管理员身份运行安装) (2)下载并安装rabbitmq 如:rabbitmq-server-3.7.4.exe.双击安装, ...

  8. Unity检测面板旋转值超过180度成负数的离奇bug

    问题描述: 无意中在检视面板上对游戏物体的tansform进行旋转,结果发现旋转超过180度成负数的离奇bug 解决方案: 创建个新的unity工程,进行如上操作,一切正常…… 怀疑问题根源是配置出现 ...

  9. Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging

    1665 - Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT a ...

  10. 07_LACP负载分担(数通华为)

    1. 网络拓扑 2. SW1配置:[SW1]vlan batch 10 20[SW1]interface GigabitEthernet 0/0/1[SW1-GigabitEthernet0/0/1] ...