精华内容
下载资源
问答
  • 定义两个整型变量a,b和两个指针变量qa,qb,输入两个整数,通过指针qa,qb,将两个整数分别存储到变量a.b后,通过指针qa,qb操作,使qa指向较小的整数,qb指向较大的整数,并输出。(题目来源:C语言程序设计第三版...

    定义两个整型变量a,b和两个指针变量qa,qb,输入两个整数,通过指针qa,qb,将两个整数分别存储到变量a.b后,通过指针qa,qb操作,使qa指向较小的整数,qb指向较大的整数,并输出。(题目来源:C语言程序设计第三版)

    #include<stdio.h>
    int mai(int *a,int *b)
    {
    	int t;
    	if(*a>*b)
    	{
    		t=*a;
    		*a=*b;
    		*b=t;
    	}
    }
    int main()
    {
    	int a,b,*qa,*qb;
    	scanf("%d %d",&a,&b);
    	qa=&a;
    	qb=&b;
    	mai(qa,qb);
    	printf("a=%d,b=%d\n*qa=%d,*qb=%d",a,b,*qa,*qb);
    	return 0;
    }
    
    
    展开全文
  • c/c++两个指针变量地址的相减

    千次阅读 2019-01-11 21:37:28
       c、c++两个指针变量的相减,需要注意两个变量的数据类型。   如下例程: #include "stdio.h" #include "string.h" using namespace std; #define uint8_t unsigned char #define uint16...

       c、c++两个指针变量的相减,需要注意两个变量的数据类型。

      如下例程:

    #include "stdio.h"
    #include "string.h"
    
    using namespace std;
    
    #define uint8_t unsigned char
    #define uint16_t unsigned short int
    #define uint32_t unsigned int
    
    typedef struct{
    	int val;
    	char numer;
    }SB_TypeDef;
    
    SB_TypeDef sb[2] = { { 1, 2 }, {3,4} };
    
    #define DATA_TYPE	uint8_t
    
    void main()
    {
    	uint8_t *pSB = (uint8_t *)&sb;
    
    	printf("%d %d \r\n",sb[0].numer, sb[1].val);
    
    	DATA_TYPE *pSb0 = (DATA_TYPE *)&sb[0];
    	DATA_TYPE *pSb1 = (DATA_TYPE *)&sb[1];
    
    	uint32_t diff_addr = pSb1 - pSb0;
    
    	printf("addr0:0x%x \r\n addr1:0x%x\r\n addr3:0x%x\r\n", pSb0, pSb1, diff_addr);
    }
    
    

      定义结构体类型SB_TypeDef,其长度sizeof(SB_TypeDef)是8,定义两个SB_TypeDef类型的结构体sb[0]、sb[1],这两个结构体物理地址相差是8,但(&sb[1] - &sb[0])是多少呢?当然是1了,若把这两个结构体的指针类型转为其他类型,则又是其他差值了。

    • #define DATA_TYPE uint8_t 
      转为uint8_t类型的指针:
      地址相差8
      在这里插入图片描述
    • #define DATA_TYPE uint32_t 
      转为uint32_t类型的指针:
      地址相差2
      在这里插入图片描述
    • #define DATA_TYPE SB_TypeDef
      转为SB_TypeDef类型的指针:
      地址相差1
      在这里插入图片描述

      所以,用时一定要注意。

    展开全文
  • c语言与指针——(二)指针变量定义与赋值

    万次阅读 多人点赞 2017-12-14 18:15:52
    指针变量可以指向另一变量,在程序中使用" * "来表示这种指向关系。 1.指针变量定义  指针的定义依然遵循先定义后使用的原则,在使用前必须先定义,指定其类型编译器再据此为其分配内存单元。  定义指针变量的...

            由上一节,我们知道了,指针就是地址,而变量的指针就是变量的地址,存放变量地址的变量就是指针变量。指针变量可以指向另一个变量,在程序中使用" * "来表示这种指向关系。

    1.指针变量的定义

            指针的定义依然遵循先定义后使用的原则,在使用前必须先定义,指定其类型编译器再据此为其分配内存单元。

            定义指针变量的一般格式:

            类型标识符 * 指针变量名

            例如:int   *p ;    float   *p;   分别是指向整形变量的指针变量p,指向浮点类型变量的指针变量q。

    注意:定义指针变量时,类型标识符一旦确定就不能改变,如果定义了一个指向整型变量的指针变量,那么它就不能再指向其他类型的变量了。也就是说一个指针变量只能指向同一种类型的变量。

    2.取地址运算符(&)

            为了使用指针,c语言提供了两个特别的运算符——取地址运算符&和取值运算符*。

            在定义了一个指针变量后,只为其分配了相应的内存单元用于存放指针的值,而这个指针变量并没有指向某个特定的变量,因此,在使用指针时,也需要将指针变量进行初始化,因为指针变量存放的是变量的地址,因此对指针初始化就是将某个变量的地址赋给它。

    例如: 

    int  x=5,*p;   p=&x;   (将x的地址赋给了指针变量p,那么指针变量p就指向了x)

            程序中定义的变量和存储器中的存储单元相对应,变量名字和存储单元的地址对应,变量内容和存储单元中所存储的数据对应。

    当然上述语句也可以写成  :

    int x=5;
    int *p=&x;
    还可以写成:

    int x=5,*p=&x;
            使用c语言编程时,每个变量都有变量名,还有变量存储的值。当程序被编译和加载后,变量名就变成了计算机内存中的地址,而变量的值就存放在该地址中或从该地址开始的连续几个内存单元中。因此,变量名和变量值实际上就是变量地址和地址中存放的值。

    3.取值运算符(*)

            如果指针变量指向了某个变量,那么就可以使用取值运算符*来访问变量中的内容。

    例如

    printf("%d\n",*p);
            如果指针变量p指向整形变量x,那么就可以用下面的语句打印变量x的值。

    4.指针变量的赋值

            和其他变量一样,也可以使用赋值运算符为指针变量赋值,但要保证两个指针变量的类型相同。

    假设有如下变量定义:

    int i,j,*p,*q;
    p=&i;
    q=&j;
            这两句将变量i和j的地址分别赋值给指针变量p和q;

            当q=p时,这条语句就是将指针变量p的内容赋值给指针变量q,其结果如下图所示:

            执行了q=p后,执行该条语句,指针变量p和q都指向了同一个变量i,因此指针变量p和q中存放的都是变量i的地址&i。变量i此时并没有初始化,只为其分配了内存单元。

    注意理解:q=p;和*q=*p

            前者为指针变量q赋值,即将指针变量p中存放的某个变量的地址赋值给q。显然,赋值后,q和p就指向了同一个变量。(赋值的内容是指针,也就是地址)  

            后者将p指向变量的赋值给q指向的变量。(赋值的内容是数值)

    例子:

    p=&i;
    q=&j;
    i=2;
    j=3;
    对上面代码分别执行q=p;*q=*p;流程图如下图:



    5.例子讲解

    通过指针变量访问整形变量

    #include <stdio.h>
    int main(){
        int a=100,b=10;
        int *pointer_1,*pointer_2;
        pointer_1=&a;
        pointer_2=&b;
        printf("a=%d,b=%d\n",a,b);
        printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2); 
        return 0;
    }
    a=100,b=10
    *pointer_1=100,*pointer_2=10

    程序分析:

    (1)在开头处定义两个指针变量*pointer_1,*pointer_2。但此时它们并未指向任何一个变量,只是提供两个指针变量,规定它们可以指向整形变量,至于指向那个整形变量,要在程序中定义,程序中pointer_1指向a,pointer_2指向b,此时pointer_1的值就是&a,pointer_2的值就是&b。

    (2)第8行输出*pointer_1,*pointer_2的值,其中*是取值符号,表示“指向变量”。所以它们的值分别就是a,b变量的值。

    (3)程序中有两处*pointer_1,*pointer_2,第四行表示定义两个指针*pointer_1,*pointer_2,“*”只是表示该变量是个指针变量。最后一行的printf函数中*pointer_1,*pointer_2代表指针变量*pointer_1,*pointer_2所指向的变量。



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

    千次阅读 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;
    }
    

    在这里插入图片描述

    展开全文
  • C语言:指针变量定义与引用

    千次阅读 多人点赞 2019-08-23 11:27:06
    一、指针变量定义和赋值 1、格式:类型名 *指针变量名; 2、举例 int *p1; char *s1, *s2; float *a1, *a2, f; 3、说明 a. 类型名:指针变量所指向的变量类型。 b. * 是定义指针变量的标志,不可丢掉...
  • 定义指针变量时*的位置

    万次阅读 2018-10-23 19:07:53
    定义指针变量时一般有如下种书写习惯: 1. int **p; 2. int** p; 而int **p这种方式是普遍适用的,那么它就一定...首先与*结合,表示p是一个指针变量,它保存了一个地址(指针);*p就是取出这个地址所指向...
  • C语言:定义指向二维数组的指针变量

    万次阅读 多人点赞 2015-12-17 21:14:03
    那么,对于一维int数组a[10],我们可以定义int *类型的指针变量p指向该数组。为什么这样定义?(按照我下面的理解方式有利于理解二维数组指针的定义)首先我们可以把这一维数组中的10元素当作10数组,每...
  • C语言指针定义变量方式

    千次阅读 2016-07-15 23:41:05
    变量a给出下面的定义: 1、 一个整型数; inta; 2、 一个指向整型数的指针; int*a; ...3、 一个指向指针的指针,它指向的指针是...5、 一个有10个指针的数组,该指针是指向一个整型数的; int *a[10]; 6、 一个指向有
  • 指针及指针变量

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

    千次阅读 多人点赞 2018-05-27 12:44:54
    两个变量的值作为实参直接传递,在子函数内部定义一个普通变量来对两个形参进行交换,并分别在子函数和主函数中打印。 #include <stdio.h> void Swap(int a,int b) { int tmp = a; a ...
  • C语言--指针交换两个变量

    千次阅读 2018-08-30 17:06:15
    //* 表示指针说明符:说明变量p是一个指针,只会在定义变量的时候出现 int a; p = &amp;a; // &amp;符号表示取a的地址,如果a是数组p=a,表示数组的首地址 a=5; // *p = 5; *代表指针运算符,访问...
  • 通过指针变量访问整型变量

    千次阅读 2020-03-05 18:32:40
    定义2个整型变量,再定义2个指针变量,分别指向这两个整型变量,通过访问指针变量,可以找到它们所指向的变量,从而得到这些变量的值。 /* Note:Your choice is C IDE */ #include "stdio.h" void main() { int a...
  • 定义指针变量时星号的位置

    千次阅读 2017-04-19 09:56:39
    int *a; int* a; 两者意思相同且后者看上去更为清楚:a被声明为类型为 int* 的指针....人们很自然地以为这条语句把所有三个变量声明为指向整形的指针, 但事实上并非如此.... b 是一个指针, 但其余两个变量只是普通
  • 题目:C++用指针作函数参数,定义一个函数,并用函数交换两个整型变量的值
  • 引用指针变量比较两个整数的大小。程序:#includeint main(){ int *p1, *p2, *p, a, b; printf("please enter two integer numbers:"); scanf("%d,%d", &a, &b); p1 = &a; p2 = &b; if (a { p = p1; p1 = p2; p2...
  • 指针和指针变量的关系

    千次阅读 多人点赞 2017-02-20 22:51:06
    指针就是地址,地址就是指针。 地址就是内存单元的编号。 指针变量就是存放内存地址的变量。
  • //有两个整型变量a和b,要求把它们的值互换 void Swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } 为什么不能用下面这个代码实现呢?? void Swap(int *a,int *b) { int *temp; *temp=*a;/...
  • 指向函数的指针变量

    千次阅读 2018-08-14 11:16:23
    函数在编译时会被分配给一个入口地址, 而指针变量用于存放地址(指针), 所以可以使用指针来指向函数并调用该函数, 这个指针就是函数指针 . 2. 定义 : 类型名 (*指针变量名) (函数参数列表) 3. 注意 : 1) 定义...
  • 在了解指针变量与初始化之前,首先要弄清楚一点:什么是指针?...比如一个指针指向11楼的某个房间,但是该楼层只有10层,若贸然进去,则会出现严重后果2、指针变量:就是指向某个内存地址的变量 char *p_ch...
  • C语言指针和指针变量

    千次阅读 多人点赞 2019-04-19 16:54:08
    概念:当定义个变量时,系统会为这个变量分配内存,比如,int a,系统会给变量a分配一块内存,大小为in型的4字节,而且每字节都会有一编号,这编号就是地址,这编号是计算机抽象出来用于访问数据的,...
  • /*=============================================================  以指针变量作为函数形参,实现两个值的互换  算法:通过函数实现两个指针变量的互换 =================
  • 对c语言普通变量和指针变量的理解

    千次阅读 2018-05-11 20:02:04
    一、普通变量和的本质区别 在说到普通变量和指针变量的区别时,我更喜欢从一更高的视角去看待这两者。首先来说,这两者都是变量,既然是变量,就会包含地址和值这部分,例如int a , 用&amp;a获得该变量的...
  • C语言文件定义,如何对文件进行操作,文件指针,如何定义指向文件指针,通过文件指针对文件进行操作,文件应用举例,二进制文件相关操作,文件定位
  • 今天来学习指针,当我们在叫外卖的时候,一般都会让外卖送到详细的地址,而当你的公司独占一层的情况,你只需要让外卖送到前台即可....指针就像一快捷方式,它指向内存的一地址.我们通过指针就可以间接的访问到数据.  
  • 最近在STM的GPIO结构体定义中看到源代码的时候,顺便复习下结构体指针变量定义及typedef 的使用。 1.结构体类型定义 定义方式1: Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针域 } *...
  • 8.3 指针数组与指向指针的指针变量 8.3.1 指针数组 如果数组元素都是相同类型的指针,则称这个...在指针数组的定义中有两个运算符:*和[],运算符[]的优先级高于*,所以*p[5]等价于*(p[5]),p[5]表示一个数组,而*表
  • 【C】指针(二)指针变量做形参

    千次阅读 2018-05-21 20:26:26
    指针变量同样可以作为函数的形式参数:在这个程序中,定义了一个函数compare,它的变量为两个指针,函数中,将这两个指针指向的数据互相交换;调用的时候,变量直接写需要调用的变量的名称,在这个例子中是 p1 p2,...
  • C语言结构体(5) 结构体指针变量

    千次阅读 2020-03-30 16:13:17
    C语言提供了基础数据类型,例如char、int等数据类型,可以定义指针变量。那么,结构体类型是用户自己定义的数据类型,同样也可以定义指针变量。结构体类型定义指针变量格式如下: struct 结构体类型名* 指针变量名...
  • 二级指针变量与数组

    千次阅读 2013-07-01 14:40:11
    因为数组名是一个常量指针常量,不能修改其指向的值,因此可以定义个指针变量指向数组。这样使用数组名加下标可访问数组中的元素,使用指针名加下标也可访问数组中的元素。这些在本章前面已经介绍过了。 现在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 522,164
精华内容 208,865
关键字:

定义两个文件的指针变量