C09 指针

Posted rask

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C09 指针相关的知识,希望对你有一定的参考价值。

目录

  • 概念

 

指针相关概念

变量

如果在程序中定义了一个变量,在对程序进行编译时,系统就会为这个变量分配内存单元。

编译系统根据程序中定义的变量类型分配一定长度的空间。

内存的基本单元是字节,一字节有8位。每字节都有一个编号,这个编号就是“地址”。

 

直接访问变量

在程序中一般是通过变量名来对内存单元进行存取操作的。其实程序经过编译以后已经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的。这种按变量地址存取变量的方式称为直接访问方式。

 

间接访问变量

间接访问的方式,即变量中存放的是另一个变量的地址。也就是说,变量中存放的不是数据,而是数据的地址。就

按C语言的规定,可以在程序中定义整型变量、实型变量、字符型变量,也可以定义这样一种特殊的变量,它是存放地址的。

 

指针

由于通过地址能找到所需的变量单元,因此也可以说,地址“指向”该变量单元。

如同一个房间号指向某一个房间一样,只要告诉房间号就能找到房间的位置。

因此在C语言中,将地址形象地称为“指针”,意思就是通过它能找到以它为地址的内存单元。

所以,一个变量的地址就称为该变量的指针。

指针就是地址,而地址就是内存单元的编号。它是一个从零开始的、操作受限的非负整数。

指针和指针只能进行相减运算,不能进行其他运算,因为没有意义。

而且进行相减运算也是有条件的:只有同一块空间中的地址才能相减。而且两个指针变量相减之后的结果是一个常量,而不是指针型变量,即相减的结果是这两个地址之间元素的个数,而不是地址的个数。

 

指针变量

概念

一个变量专门用来存放另一个变量的地址,那么就称它为“指针变量”。即指针变量里面存放的是指针,即地址。

“指针”和“指针变量”的区别:指针是一个地址;而指针变量是存放地址的变量。

通常也将“指针变量”简称为“指针”。

 

指针变量的定义

语法格式:

基类型  *指针变量名;

 

基类型:数据类型和*组合再一起构成指针类型变量类型。

不同数据类型在内存中所占用的字节数是不同的,指针一般指向数据所在内存的第一个字节地址。

指针的运算中,地址加减的基本单位是数据类型的字节数。例如整数的指针变量+1,实际上在内存中是移动4个字节。

示例代码:

#include <stdio.h>

int main ()
{
    int *p, *q;
    int k;  //k用来存放两个地址数相减的结果
    int i = 3, j = 4;
    p = &i;
    q = &j;
    k = p-q;
    printf("p:0x%x
q:0x%x
k = %d
", p, q, k);
    return 0;
}

 

输出结果:

技术分享图片

 

以上是关于C09 指针的主要内容,如果未能解决你的问题,请参考以下文章

[SPOJGCJ1C09C] Bribe the Prisoners

更新:C++ 指针片段

片段中的 EditText 上的空指针异常 [重复]

片段中的空指针异常

活动到片段通信:当我尝试从活动更新片段中的文本视图时,出现空指针异常

使用回收器适配器获取空指针