C语言教程
+ -

C语言 指针

2019-09-09 18 0

C语言中的指针简单易学,使用指针可以更轻松地执行某些C编程任务,而如果不使用指针则无法执行其他任务(如动态内存分配)。让我们以简单轻松的步骤开始学习它们。

 #include <stdio.h>

 int main () {

    int  var1;
    char var2[10];

    printf("Address of var1 variable: %x\n", &var1  );
    printf("Address of var2 variable: %x\n", &var2  );

    return 0;
}

编译并执行上述代码后,将产生以下输出-

Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6

指针

指针是一个变量,其值是另一个变量的地址,即存储位置的直接地址,像任何变量或常量一样,您必须在使用指针存储任何变量地址之前声明一个指针。指针变量声明的一般形式是-

type *var-name;

在这里, type 是指针的基本类型,它必须是有效的C数据类型,并且 var-name是指针变量的名称,用于声明指针的星号*与用于乘法的星号相同,但是,在此语句中,星号用于将变量指定为指针。看看一些有效的指针声明-

int    *ip;    /* pointer to an integer */
double *dp;    /* pointer to a double */
float  *fp;    /* pointer to a float */
char   *ch     /* pointer to a character */

所有指针的值的实际数据类型(无论是整数,浮点数,字符还是其他形式)都是相同的,即表示内存地址的十六进制数字。

使用指针

有一些重要的操作, (a)我们定义一个指针变量,(b)将变量的地址分配给指针(c)最终访问该值在指针变量中可用的地址处。这是通过使用一元运算符 *完成的,该运算符返回位于变量操作数指定地址处的变量的值。以下示例利用这些操作-

 #include <stdio.h>

 int main () {

    int  var=20;   /* actual variable declaration */
    int  *ip;        /* pointer variable declaration */

    ip=&var;  /* store address of var in pointer variable*/

    printf("Address of var variable: %x\n", &var  );

    /* address stored in pointer variable */
    printf("Address stored in ip variable: %x\n", ip );

    /* access the value using the pointer */
    printf("Value of *ip variable: %d\n", *ip );

    return 0;
 }

编译并执行上述代码后,将产生以下输出-

 Address of var variable: bffd8b3c
 Address stored in ip variable: bffd8b3c
 Value of *ip variable: 20

空指针

在没有确切地址要分配的情况下,将NULL值分配给指针变量始终是一个好习惯,这是在变量声明时完成的,分配了NULL的指针称为 null 指针。

NULL指针是在几个标准库中定义的值为零的常量。考虑以下程序-


 #include <stdio.h>

 int main () {

    int  *ptr=NULL;

    printf("The value of ptr is : %x\n", ptr  );

    return 0;
 }

编译并执行上述代码后,将产生以下输出-

 The value of ptr is 0

在大多数操作系统中,不允许程序访问地址0处的内存,因为该内存是由操作系统保留的,但是,存储器地址0具有特殊的意义,它指示指针不旨在指向可访问的存储位置。但是按照惯示例,如果指针包含空(零)值,则假定该指针不指向任何内容。

要检查空指针,可以使用” if”语句,如下所示:

 if(ptr)     /* succeeds if p is not null */
 if(!ptr)    /* succeeds if p is null */

详细介绍

指针有许多但很简单的概念,它们对C编程非常重要。任何C程序员都应该清楚以下重要的指针概念-

No. Concept 描述
1 指针运算 指针中可以使用四种算术运算符:++,-,+,-
2 指针数组 您可以定义数组以容纳多个指针。
3 指针的指针 C允许您将指针放在指针上,依此类推。
4 指针作为参数传递给函数 通过引用或地址传递参数可以使被调用函数在调用函数中更改传递的参数。
5 从函数中返回指针 C允许函数返回指向局部变量,static 变量和动态分配的内存的指针。

0 篇笔记 写笔记

C++ 指针vs数组
指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。请看下面的程序:#include using namespace std;const int MAX = 3;int ma......
C++ 指向数组的指针
您可以先跳过本章,等了解了 C++ 指针的概念之后,再来学习本章的内容。如果您对 C++ 指针的概念有所了解,那么就可以开始本章的学习。数组名是一个指向数组中第一个元素的常量指针。因此,在下面的声明中:double balance[50];balance 是一个指向 &balance[0] ......
C语言 指针指针
指向指针指针是多个间接的形式,或指针链,通常,指针包含变量的地址,当我们定义指向指针指针时,第一个指针包含第二个指针的地址,第二个指针指向包含实际值的位置,如下所示。作为指针的变量必须声明为指针。这是通过在其名称前放置一个额外的星号来完成的。例如,以下声明了一个指向Int-类型的指针int **......
C语言 数组指针
假设您对C中的指针有一些了解,让我们开始:数组名称是指向数组的第一个元素的常量指针。double balance[50];Balance是指向&Balance[0]的指针,它是数组Balance的第一个元素的地址,因此,以下程序片段将p分配为Balance-的第一个元素的地址double *......
C语言 指针数组
在我们理解指针数组的概念之前,让我们考虑一下下面的示例,该示例使用3个整数的数组#include const int MAX=3;int main () { int var[]={10, 100, 200}; int i; for (i=0; i <......
C# 不安全代码
当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。 不安全代码或非托管代码是指使用了 指针变量的代码块。指针变量指针 是值为另一个变量的地址的变量,即,内存位置的直接地址。就像其他变量或常量,您必须在使用指针存储其他变量地址之前声明指针指针变量声明的一般形式为:type......
ObjectiveC 指针运算
正如上篇章节中所解释的那样,Objective-C指针是一个地址,它是一个数值。 因此,可以像对数值一样对指针执行算术运算。可以在指针上使用四个算术运算符:++,-- ,+ 和 -要理解指针运算,假设ptr是一个整数指针,它指向地址1000。假设32位整数,对指针执行以下算术运算 -ptr++现在,......
C++ this指针
在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。下面的实例有助于更好地理解 this 指针的概念:#incl......
Perl 文件操作
Perl 使用一种叫做文件句柄类型的变量来操作文件。从文件读取或者写入数据需要使用文件句柄。文件句柄(file handle)是一个I/O连接的名称。Perl提供了三种文件句柄:STDIN,STDOUT,STDERR,分别代表标准输入、标准输出和标准出错输出。Perl 中打开文件可以使用以下方式:o......
C++ 指向指针指针
指向指针指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。C++ 中指向指针指针一个指向指针指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指......
C++ 指针调用
向函数传递参数的指针调用方法,把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。按指针传递值,参数指针被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为指针类型,该函数用于交换参数所......
ObjectiveC 指向数组的指针
在学习与Objective-C中的指针相关的章节之前,您理解本章很可能有点吃力。因此,在学习本节之前,我们假设您对Objective-C编程语言中的指针有一点了解。数组名称是指向数组第一个元素的常量指针。 因此,在声明中 -double balance[50];balance是指向&bala......
GO语言 指向指针指针
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针指针变量。当定义一个指向指针指针变量时,第一个指针存放第二个指针的地址,第二个指针存放变量的地址:指向指针指针变量声明格式如下:var ptr **int;以上指向指针指针变量为整型。访问指向指针指针变量值需要使用两......
ObjectiveC 指针
Objective-C中的指针简单易学。使用指针可以更轻松地执行某些Objective-C编程任务,并且在不使用指针的情况下无法执行其他任务(如动态内存分配)。 所以有必要学习指向成为一个完美的Objective-C程序员。在这小节中将通过简单的步骤学习指针。每个变量都是一个内存位置,每个内存位置都......
C++ 传递指针给函数
C++ 允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值:#include #include using namespace std;void ge......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!