精华内容
下载资源
问答
  • 变量的指针和指向变量的指针变量

    千次阅读 2020-04-24 20:53:08
    指针和指针变量的定义: 一个变量的地址称为变量的“指针” ...可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个变量 例子 float *pointer_3; char *pointer_4; po...

    指针和指针变量的定义:

    一个变量的地址称为该变量的“指针”
    例如,地址1000是变量i的指针。如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量”

    定义一个指针变量

    定义指针变量的一般形式为
    基类型 *指针变量名;
    说明
    可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量
    例子
    float *pointer_3;
    char *pointer_4;
    pointer_1=&i;
    pointer_2=&j;
    在这里插入图片描述
    注意

    1. 指针变量前面的“*”,表示该变量的类型为指针型变量
      例 : float pointer_1;
      指针变量名是pointer_1 ,而不是
      pointer_1
    2. 在定义指针变量时必须指定基类型。
      需要特别注意的是,只有整型变量的地址才能放到指向整型变量的指针变量中。下面的赋值是错误的∶
      float a;
      int * pointer_1;
      pointer_1=&a;

    指针变量的引用

    注意:
    指针变量中只能存放地址(指针)
    不要将一个整数(或任何其他非地址类型的数据)赋给一个指针变量
    例子 —— 通过指针变量访问整型变量

    #include <stdio.h>
    void main()
    {
         int a,b;
         int *pointer_1, *pointer_2;
         a=100;b=10;
         pointer_1=&a;  /*把变量a的地址赋给pointer_1 */  
         pointer_2=&b;  /*把变量b的地址赋给pointer_2 */
    printf(″%d,%d\n″,a,b);
    printf(″%d,%d\n″,*pointer_1, *pointer_2);
    }
    

    在这里插入图片描述

    对“&”和“*”运算符说明:

    如果已执行了语句 pointer_1=&a;

    1. &* pointer_1的含义是什么?
      “&”和“”两个运算符的优先级别相同,但按自右而左方向结合。因此,& pointer_1与&a相同,即变量a的地址。
      如果有pointer_2 =&* pointer_1 ;它的作用是将&a(a的地址)赋给pointer_2 ,如果pointer_2原来指向b,经过重新赋值后它已不再指向b了,而指向了a
      在这里插入图片描述
    2. &a的含义是什么?
      先进行&a运算,得a的地址,再进行
      运算。&a和pointer_1的作用是一样的,它们都等价于变量a。即*&a与a等价
    3. (*pointer_1)++相当于a++
      例子 —— 输入a和b两个整数,按先大后小的顺序输出a和b
    #include <stdio.h>
    void  main()
    { int *p1,*p2,*p,a,b;
      scanf("%d,%d",&a,&b);
     p1=&a;p2=&b;
      if(a<b)
     {p=p1;p1=p2;p2=p;}
     printf("a=%d,b=%d\n\n″,a,b);
      printf("max=%d,min=%d\n″,*1,*2);
    } 
    

    在这里插入图片描述

    指针变量作为函数参数

    例子 —— 对输入的两个整数按大小顺序输出

    #include <stdio.h>
    void main()
    {void swap(int *p1,int *p2);
     int a,b;
     int *pointer_1,*pointer_2;
        scanf("%d,%d",&a,&b);
     pointer_1=&a; pointer_2=&b;
      if(a<b=swap(pointer_1,pointer_2));
     printf("\n%d,%d\n",a,b);
    }   
    void swap(int *p1,int *p2)
    { int  temp;
          temp=*p1;
         *p1=*p2;
         *p2=temp;
    }
    

    在这里插入图片描述

    展开全文
  • 指针变量与数组的关系及什么是指针数组: 一维数组: 数组原本就是以指针的格式使用的,数组名a相当于char * const a。但这里需要注意的是数组名表示的是一个数组的首地址,是一个地址常量,不能给地址常量赋值,...

    指针变量与数组的关系及什么是指针数组:

    • 一维数组:

    数组原本就是以指针的格式使用的,数组名a相当于char * const a。但这里需要注意的是数组名表示的是一个数组的首地址,是一个地址常量,不能给地址常量赋值,但能改变该地址所指向的内容,比如之前a首地址存放的内容为1,可以使用*a=2改变该地址单元里的内容。
    在输出数组元素的值时一般以a[0]形式输出,该a[0]形式相当于**a、*(a+0)
    char a[1],*p;
    引用一维数组a的第i个元素,有下标法和指针法。假设指针变量p指向数组的首元素(p=a),则有四种数组元素的表示方法:
    a[i] ↔ p[i] ↔ *(p(是变量)+i) ↔ *(a(是常量)+i)
    a相当于c语言的宏替换#define a 地址常量。p是一个变量,是要把改变量所存放的地址常量取出来参加运算。

    这里需要注意的是,指针变量和数组在访问数组中的元素时,一定条件下其使用方法具有相同的形式,因为指针变量和数组名都是地址量。但指针变量和数组的指针(或叫数组名)在本质上是不同的,数组在内存中的位置在程序运行过程中是无法动态改变的。因此,数组名是地址常量,指针是地址变量。数组名可以在运算中作为指针参与,但不允许被赋值。

    • 二维数组:

    二维数组实际上是以一维数组的方式连续存放的,比如这里定义一个二维数组int c[2][2],可以把这二维数组当作是由两个一维数组组成的,然后我们在以一维数组的访问方式去访问数组元素,第一行的一维数组名为c[0],第二行的一维数组名为c[1]。这两个一维数组名与首数组名c类型一样,都是地址常量。首数组名c等于第一行一维数组名c[0], c+1就等于第二行的一维数组名c[1]。所以去访问二维数组也和一维数组一样。
    这里定义一个指针int p=c[0]。
    第一行:c[0][i] ↔ *(p+i) ↔ *(c[0]+i) ↔ *(*(c+0)+i) ↔ *(&c[0][0]+i)
    第二行:c[1][i] ↔ *(c[1]+i) ↔ *(*(c+1)+i) ↔ *(&c[1][0]+i)
    这里需要注意的是,
    (c+1)的结果是第二行的首地址,不是该地址所指向的内容。也就是*(c+1)等价于c[1](前提是二维数组。在一维数组中*(a+1)返回的是地址所指向的内容,不是地址),这里实际也说明了数组本身就是以指针的形式去处理的。

    指针数组:顾名思义,就是由同种类型的指针变量构成的数组。
    比如有如下定义:
    char p[2];
    这里需要注意的是,由于“[ ]”的优先级高于“
    ”,所以,数组名p先于“[ ]”结合,构成一个数组形式,然后该数组在与“*”结合,构成指针数组形式。

    这里说下指针数组名与非指针数组名的区别(一维数组举例):
    非指针一维数组名的是地址常量,是一级指针形式。而指针的一维数组名也是一个地址常量,但该地址是二级指针形式。
    之前我们知道了以为数组值可以用下标法引用,但也可以用指针法引用,比如:
    a[1]等价于*(a+1)
    所以引用指针数组元素可以使用:((p+i)),也就是**(p+i),或者*p[i]来引用。
    指针数组首地址是二级指针地址常量,所以可以定义一个二级指针变量来指向该二级指针地址常量,即 char p1=p;或者也可以用p1=&p[0]来指向,这两种形式是一样的。

    下面讲下如何使用指针数组来遍历非指针二维数组中的元素:
    这里先定义一个字符二维数组:char c[2][2]={1,2,3,4};
    然后再定义一个指针数组,将指针数组指向该字符二维数组:char *p[2]={ c[0] , c[1] };

    那么,如何访问字符二维数组的第一行元素呢?
    我们知道p[0]保存的是c[0]地址常量或者说保存的是&c[0][0],所以p[0]指向第一行第一列的内容,即值1。那么如何指向第一行第二列的值呢,很简单下,先用p[0]取出第一行第一列的地址,然后将地址加一,即p[0]+i,在将该地址的值取出,即(p[0]+i),然后我们知道p[0]也可以表示成*(p+0),所以又可以表示成*((p+0)+i),同理,第二行数组元素的值可以表示成(*(p+1)+i)。

    展开全文
  • 一句话区分指针变量变量指针

    千次阅读 2018-07-11 09:31:30
    区分是常量指针还是指针常量,关键要看const修饰的是谁。int const与const int表达的意思是一样的。常量指针:const在*前面,指向常量的指针int const *n;或者是 const int *n;指针常量:const在*后面,指针本身是...

    区分是常量指针还是指针常量,关键要看const修饰的是谁。int constconst int表达的意思是一样的。


    常量指针const*前面,指向常量的指针

    int const *n;或者是 const int *n

    指针常量:const*后面,指针本身是常量,不可修改

    int *const n;


    例子:

    1.常量指针

    int ab
    const int *p = &a//常量指针    
    *p = 8;    //错误,*p不可修改 (ERROR

    p = &b         //正确,p 可以修改 p = &b


    2.指针常量

    int a
    int * const p = &a    //指针常量

    *p = 8   //正确,*p可以修改

    p++        //错误,p不可以修改
                                      

    展开全文
  • 指针和指针变量

    千次阅读 多人点赞 2019-05-12 22:06:11
    为了表示指针变量和他所的变量之间的联系,在程序中用“*”表示"指向",如果定义变量 i 为指针变量,那么 *i 就表示指针变量 i 里面存放的地址所指向的存储单元里面的数据,很绕吧,可以在纸上画一画。 ...

    为了表示指针变量和他所指的变量之间的联系,在程序中用“*”表示"指向",如果定义变量 i 为指针变量,那么 *i 就表示指针变量 i 里面存放的地址所指向的存储单元里面的数据,很绕吧,可以在纸上画一画。

    指针变量的定义

    C语言规定所有变量在使用前必须先定义,指定其类型,并按此分配内存单元。指针变量不同于整型变量和其他类型的变量,他是专门来存储地址的,所以必须将他定义为“指针类型”。

    指针变量定义的一般形式为:

    基类型 *指针变量名
    

    比如:

    int *i;
    int *j;
    

    说明:
    1 “*”表示变量的类型为指针类型,指针变量名为i和j,而不是 *i 和 *j;

    2 在定义指针变量时必须指定其类型,指针变量的“基类型”用来指定该指针变量可以指向的变量类型。比如 “int *i”,表示,表示 i 只可以指向 int 类型的变量,又比如 “float *j”,表示 j 指向float 型变量。换句话说,“基类型”就表示指针变量里面所存放的“变量地址”,所指向的变量可以是什么类型的,说简单点就是:“以 int *i”为例子,“*”表示这个变量是一个指针变量,而“int”表示这个变量只能存放 int 类型变量的地址。

    3 为什么叫做基类型,而不直接叫类型?因此比如:“int *i”,其中 i 是变量名, i变量的数据类型是“int ”类型,,即存放的是 int 变量地址的类型,“int” 和 “”加起来才是变量 i 的类型,所以叫做基类型。

    展开全文
  • 指针变量

    千次阅读 2020-12-23 13:50:02
    我们一般都是统称它们为指针,在大多数情况下,指针的都是指针变量。如果指针用得很熟悉的话,没有必要对它们做严格区分。 指针变量和普通变量一样,都是用于存放数据的,只是指针变量存放的数据很特殊,是为存地址。...
  • 1.指针变量:指针值(即指针的指向)可以改变的指针,只能指向变量; 2.指针常量:指针值(即指针的指向)不能改变的指针,只能指向变量,但可以修改指向的实体变量的值; 3.常量指针:指向常量的指针,所以不能...
  • C指向结构体变量的指针(结构指针变量)

    千次阅读 多人点赞 2018-04-22 17:03:32
    通过结构指针变量即可访问结构的变量。结构指针变量说明的一般形式如下:struct 结构名 *结构指针变量名 结构名和结构变量时两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不会对它分配内存...
  • 指针变量声明为const型,这样指针变量始终保持为初值,不能改变,即其指向不能改变 例 #include #include int main() { char cBuff1[100] = "1234"; char cBuff2[100] = "5678"; char * const
  • 指针及指针变量

    千次阅读 2018-05-26 19:40:08
    本篇博客就介绍指针和指针变量的相关定义知识。&amp;a就是得到a的地址,其实“指针==地址”,int *p就是定义一个整型地址(指针)变量int a=10;//整型变量存放整型值double b=1.24;//浮点型变量存放浮点型值int ...
  • C语言指针和指针变量

    千次阅读 多人点赞 2019-04-19 16:54:08
    一、指针 概念:当定义一个变量时,系统会为这个变量分配内存,比如,int a,系统会给变量a分配一块内存,大小为in型的4个字节,而且每个字节都会有一个编号,这个编号就是地址,这个编号是计算机抽象出来用于访问...
  • C语言结构体变量 指针以及对结构体成员的访问

    千次阅读 多人点赞 2019-10-12 12:21:26
    文章目录结构体结构体变量访问成员的方法结构体指针变量访问成员的方法 结构体 struct AGE { int year; int month; int day; }; struct STUDENT { char name[20]; //姓名 int num; //学号 struct AGE birthday...
  • 对c语言普通变量和指针变量的理解

    千次阅读 2018-05-11 20:02:04
    一、普通变量和的本质区别 在说到普通变量和指针变量的区别时,我更喜欢从一个更高的视角去看待这两者。首先来说,这两者都是变量,既然是变量,就会包含地址和值这两部分,例如int a , 用&amp;a获得变量的...
  • 引用变量(&符号)与指针

    千次阅读 2019-05-08 17:53:27
    引用(功能类似指针)也为函数处理大型结构提供了一种非常便捷的途径 创建引用变量 符号&除了表示指示变量的地址外,它也赋予了另一种含义,将其用来声明引用。 int nliki = 23; int &...
  • C++中交换两个变量的值的方法

    千次阅读 多人点赞 2019-11-05 18:21:03
    即不能通过将变量名传入函数的方式进行交换,因为这种方式是将值进行拷贝后作为参数传入函数,也就是说函数内部使用的拷贝的值,在函数执行完后就会销毁,而不是对变量的原值进行操作。 而在C++中需要通...
  • 结构体变量和结构体指针的区别,

    千次阅读 多人点赞 2019-06-23 13:11:44
    而指向运算符则是结构体指针访问成员时使用的,因为一直都是再用结构体指针,突然用结构体变量,使用了指向运算符,看了半天才看出来,当然结构体指针也可以使用成员运算符但需要先取值,但一般没人这么用, ...
  • 目录 概念 内存分配 对象的引用 结构体变量和结构体指针作形参的区别 含结构体变量和结构体指针变量形参的函数调用 ...结构体指针变量指向结构体变量的指针或者指向结构体数组的指针。 Studen
  • 指针变量指针变量的地址(c/c++)

    千次阅读 2016-05-16 13:43:27
    首先,明确一点,指针变量s 它本身是指针变量,它的值(即指针变量s的内容)是一个地址,指向字符串“ABCD”的地址。也就是说,s的内容在循环前指向A,循环后指向 null 空字符。这点不难理解。 然后,既然指针变量...
  • 指针变量与变量地址

    千次阅读 2017-06-19 15:12:49
    一、基本概念   存储单元一般应具有存储数据和读写数据的功能,以8位二进制作为一个存储单元...存储地址一般用十六进制数表示,而每一个存储器地址中又存放着一组二进制(或十六进制)表示的数,通常称为地址的内容。
  • 指针变量与普通变量的区别

    千次阅读 2020-04-13 12:03:10
    一、普通变量和的本质区别 ...普通变量和指针变量的区别就是,这两种变量的值的所表示的意义不同, 一般来说,普通变量的值,只是供程序员所使用的值,而指针变量的值则不同,它的值存放的是其他变量的地址。...
  • c语言结构体学习整理(结构体初始化,结构体指针)

    万次阅读 多人点赞 2018-11-01 20:22:12
    首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活使用,然而,在我们实际应用中,每一种变量进行一次声明,再结合起来...
  • 接着创建一个指针变量,p为指针变量的变量名: int *p; 目前的状态: val为变量的值,42;&amp;为取地址符,&amp;val就是val的地址。 附: 区分引用与取地址符的差别: &amp;符号放在一个变量...
  • 前言 :虽然经常使用C语言进行开发,但对于其指针的理解总还是有些模糊。在这里专门写篇博客记录下一些常见的指针问题。 指针变量与普通变量的区别 ...对于指针,可以修改指针变量的指向地址和地址的内容。
  • 指针变量及其定义

    千次阅读 2019-02-14 14:14:26
    指针和指针变量的区别 一:指针是一个地址,指针...(*)表示变量类型为指针变量类型,指针变量名为i和j不是 *i 和 *j 。 在这里插入代码片 二:int *i; 表示指针类型只能指向int类型的变量。在这里插入代码片 ...
  • C++变量指针

    千次阅读 2017-04-23 13:24:46
    指针变量是一种特殊的变量,它和以前学过的其他类型的变量的不同之处是:用它来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在C++中用“*”符号表示指向 或表示取值,例如,i_pointer是一个指针...
  • 指针变量占用多少字节

    千次阅读 2019-05-19 18:21:24
    我们讲过,指针变量根据“基类型”的不同有 int * 型,float * 型,double * 型,char * 型等 但是我们前面在讲数据类型的时候讲过,int 型变量占用 4 字节,float型变量占用 4 字节,double类型变量占用 8字节,...
  • C语言中指针局部变量释放问题

    千次阅读 2019-03-11 21:01:02
    C语言中指针局部变量释放问题1.问题代码2.一次改动3.理论4.佐证测试代码5.总结 1.问题代码 #include &amp;amp;amp;quot;stdio.h&amp;amp;amp;quot; #include &amp;amp;amp;quot;string.h&amp;amp...
  • 变量指针简单理解

    万次阅读 2017-08-29 10:19:24
    C++变量指针简单理解
  • C语言指针基础知识点(三)--指针变量作为函数参数

    千次阅读 多人点赞 2019-12-01 23:01:20
    C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 指针变量作为函数参数    函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址...
  • 只要是指针,要使用它前就必须保证指针变量的值是一个有效的值 ;否则,它指向的内存一定是垃圾数据!  C语言指针一般在什么时候需要申请内存空间 C语言的内存管理很重要,集魄力和麻烦于一身,看你自己的心态如何...
  • C++ 类的静态成员变量指针如何释放

    千次阅读 2019-08-16 14:56:07
    类的静态成员变量指针,如何释放? 目前有两种方法: 智能指针 使用静态变量维护一个引用计数,每创建一个对象,引用计数加1,析构函数中,引用计数减一,直到为0才释放内存 //方法一:使用智能指针 //使用智能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 979,679
精华内容 391,871
关键字:

)变量的指针是指该变量的(