精华内容
下载资源
问答
  • 常量与变量1.常量是指值不会改变的量(1) 常量不能写在赋值语句的左边。(2) 常量不能进行自加、自减运算。2.变量是指在程序运行过程中其值可以...(4) 变量在使用之前必须先定义。(5) 变量有生命周期和作用域。3.变...
    58aef072ea0b60a657a5153d6f0c064d.png

    常量与变量

    1.常量是指值不会改变的量

    (1) 常量不能写在赋值语句的左边。

    (2) 常量不能进行自加、自减运算。

    2.变量是指在程序运行过程中其值可以发生改变的量

    (1) 变量需占用一定数量的内存空间,而常量不需要。

    (2) 局部变量若没有声明为静态变量,那么其初值是随机的。

    (3) 不同类型的变量可以放在一起参与运算,但要注意运算规则。

    (4) 变量在使用之前必须先定义。

    (5) 变量有生命周期和作用域。

    3.变量的生命周期

    “变量的生”代表一个变量的产生,“变量的死”代表一个变量的消失。

    举例:

    #include

    void main()

    {

    int a=5; //定义一个变量a,并赋值为5,这代表了“变量的生”。

    printf(“%d”,a);

    } //主函数运行到这一步代表整个程序全部结束,C编译器会将其先前所定义的变量全部释放,释放就意味着消失,消失就意味着“变量的死”。

    4.变量的开辟与释放

    (1) 变量的开辟是指定义一个变量,需要开辟一定数量的内存单元供变量所用。

    (2) 变量的释放是指某个变量所占用的内存单元不再被该变量使用,因为它已经消失了。但变量消失了,内存单元里面的值还在。不要错误的认为变量的释放就是意味着该变量所对应的内存单元里面的值变成空(NULL)了。NULL是符号常量,代表数值0。

    (3) 变量的规则:名字由英文大小写字母、数字下划线组成。首字母必须是大小写英文字母,不能是数字,32个关键字不能在其内。

    (4) 合法常量:

    O开头的为八进制数(0-7)

    OX开头的为十六进制数(0-9,a-f)

    0.61e-6(前面为十进制数,后面必须为十进制整数,不能为float型和浮点型。

    (5)定义变量语句:

    定义不同的变量时,应用分号隔开。

    定义变量的关键字必须是小写。

    定义格式为:类型名,变量名。

    定义以语句的形式出现应以分号结尾。

    定义相同类型变量之间用逗号分开。

    在同一程序变量中,同一变量名不能重复定义充当两个不同的变量。

    获取方式:

    1.在你手机的右上角有【关注】选项,或点击我的头像,点击关注!(关注我)

    2.关注后,手机客户端点击我的主页面,右上角有私信,请私信发我:编程

    电脑已经设置好了关键词自动回复,自动领取就好了!这几天上万个消息,真的回复不过来,所以回复的时候请注意关键词!

    其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这里请私信我“编程”不管你是小白还是大牛欢迎入住大家一起交流成长。小编会在里面不定期分享干货源码,包括我精心整理的一份c++零基础教程。欢迎各位感兴趣的的小伙伴。

    学习思路:

    3636fdf5ee104f17da88e87fcf89c874.png

    学习资料:

    ab715f8f668017ed06034cb64b8531f6.png
    展开全文
  • C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。现在假设有一个 char 类型的变量 ...

    数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。

    在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。

    现在假设有一个 char 类型的变量 c,它存储了字符 'K'(ASCII码为十进制数 75),并占用了地址为 0X11A 的内存(地址通常用十六进制表示)。另外有一个指针变量 p,它的值为 0X11A,正好等于变量 c 的地址,这种情况我们就称 p 指向了 c,或者说 p 是指向变量 c 的指针。

    ad6aa2363eb529ca5b1704c1dcc91939.png

    定义指针变量

    定义指针变量与定义普通变量非常类似,不过要在变量名前面加星号*,格式为:

    datatype *name;

    或者

    datatype *name = value;

    *表示这是一个指针变量,datatype表示该指针变量所指向的数据的类型 。例如:

    int *p1;

    p1 是一个指向 int 类型数据的指针变量,至于 p1 究竟指向哪一份数据,应该由赋予它的值决定。再如:

    int a = 100;

    int *p_a = &a;

    在定义指针变量 p_a 的同时对它进行初始化,并将变量 a 的地址赋予它,此时 p_a 就指向了 a。值得注意的是,p_a 需要的一个地址,a 前面必须要加取地址符&,否则是不对的。

    和普通变量一样,指针变量也可以被多次写入,只要你想,随时都能够改变指针变量的值,请看下面的代码:

    //定义普通变量

    float a = 99.5, b = 10.6;

    char c = '@', d = '#';

    //定义指针变量

    float *p1 = &a;

    char *p2 = &c;

    //修改指针变量的值

    p1 = &b;

    p2 = &d;

    *是一个特殊符号,表明一个变量是指针变量,定义 p1、p2 时必须带*。而给 p1、p2 赋值时,因为已经知道了它是一个指针变量,就没必要多此一举再带上*,后边可以像使用普通变量一样来使用指针变量。也就是说,定义指针变量时必须带*,给指针变量赋值时不能带*。

    假设变量 a、b、c、d 的地址分别为 0X1000、0X1004、0X2000、0X2004,下面的示意图很好地反映了 p1、p2 指向的变化:

    8f154b4df06ae0f1b771540bcafe4028.png

    需要强调的是,p1、p2 的类型分别是float*和char*,而不是float和char,它们是完全不同的数据类型,读者要引起注意。

    指针变量也可以连续定义,例如:

    int *a, *b, *c; //a、b、c 的类型都是 int*

    注意每个变量前面都要带*。如果写成下面的形式,那么只有 a 是指针变量,b、c 都是类型为 int 的普通变量:

    int *a, b, c;

    通过指针变量取得数据

    指针变量存储了数据的地址,通过指针变量能够获得该地址上的数据,格式为:

    *pointer;

    这里的*称为指针运算符,用来取得某个地址上的数据,请看下面的例子:

    #include

    int main(){

    int a = 15;

    int *p = &a;

    printf("%d, %d\n", a, *p); //两种方式都可以输出a的值

    return 0;

    }

    运行结果:

    15, 15

    假设 a 的地址是 0X1000,p 指向 a 后,p 本身的值也会变为 0X1000,*p 表示获取地址 0X1000 上的数据,也即变量 a 的值。从运行结果看,*p 和 a 是等价的。

    上节我们说过,CPU 读写数据必须要知道数据在内存中的地址,普通变量和指针变量都是地址的助记符,虽然通过 *p 和 a 获取到的数据一样,但它们的运行过程稍有不同:a 只需要一次运算就能够取得数据,而 *p 要经过两次运算,多了一层“间接”。

    假设变量 a、p 的地址分别为 0X1000、0XF0A0,它们的指向关系如下图所示:

    1ae84af5867828cd08e5488caa17c265.png

    程序被编译和链接后,a、p 被替换成相应的地址。使用 *p 的话,要先通过地址 0XF0A0 取得变量 p 本身的值,这个值是变量 a 的地址,然后再通过这个值取得变量 a 的数据,前后共有两次运算;而使用 a 的话,可以通过地址 0X1000 直接取得它的数据,只需要一步运算。

    也就是说,使用指针是间接获取数据,使用变量名是直接获取数据,前者比后者的代价要高。

    指针除了可以获取内存上的数据,也可以修改内存上的数据,例如:

    #include

    int main(){

    int a = 15, b = 99, c = 222;

    int *p = &a; //定义指针变量

    *p = b; //通过指针变量修改内存上的数据

    c = *p; //通过指针变量获取内存上的数据

    printf("%d, %d, %d, %d\n", a, b, c, *p);

    return 0;

    }

    运行结果:

    99, 99, 99, 99

    *p 代表的是 a 中的数据,它等价于 a,可以将另外的一份数据赋值给它,也可以将它赋值给另外的一个变量。

    *在不同的场景下有不同的作用:*可以用在指针变量的定义中,表明这是一个指针变量,以和普通变量区分开;使用指针变量时在前面加*表示获取指针指向的数据,或者说表示的是指针指向的数据本身。

    也就是说,定义指针变量时的*和使用指针变量时的*意义完全不同。以下面的语句为例:

    int *p = &a;

    *p = 100;

    第1行代码中*用来指明 p 是一个指针变量,第2行代码中*用来获取指针指向的数据。

    需要注意的是,给指针变量本身赋值时不能加*。修改上面的语句:

    int *p;

    p = &a;

    *p = 100;

    第2行代码中的 p 前面就不能加*。

    指针变量也可以出现在普通变量能出现的任何表达式中,例如:

    int x, y, *px = &x, *py = &y;

    y = *px + 5; //表示把x的内容加5并赋给y,*px+5相当于(*px)+5

    y = ++*px; //px的内容加上1之后赋给y,++*px相当于++(*px)

    y = *px++; //相当于y=*(px++)

    py = px; //把一个指针的值赋给另一个指针

    【示例】通过指针交换两个变量的值。

    #include

    int main(){

    int a = 100, b = 999, temp;

    int *pa = &a, *pb = &b;

    printf("a=%d, b=%d\n", a, b);

    /*****开始交换*****/

    temp = *pa; //将a的值先保存起来

    *pa = *pb; //将b的值交给a

    *pb = temp; //再将保存起来的a的值交给b

    /*****结束交换*****/

    printf("a=%d, b=%d\n", a, b);

    return 0;

    }

    运行结果:

    a=100, b=999

    a=999, b=100

    从运行结果可以看出,a、b 的值已经发生了交换。需要注意的是临时变量 temp,它的作用特别重要,因为执行*pa = *pb;语句后 a 的值会被 b 的值覆盖,如果不先将 a 的值保存起来以后就找不到了。

    关于 * 和 & 的谜题

    假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a和&*pa分别是什么意思呢?

    *&a可以理解为*(&a),&a表示取变量 a 的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a仍然等价于 a。

    &*pa可以理解为&(*pa),*pa表示取得 pa 指向的数据(等价于 a),&(*pa)表示数据的地址(等价于 &a),所以&*pa等价于 pa。

    对星号*的总结

    在我们目前所学到的语法中,星号*主要有三种用途:

    表示乘法,例如int a = 3, b = 5, c;  c = a * b;,这是最容易理解的。

    表示定义一个指针变量,以和普通变量区分开,例如int a = 100;  int *p = &a;。

    表示获取指针指向的数据,是一种间接操作,例如int a, b, *p = &a;  *p = 100;  b = *p;。

    展开全文
  • #include #include //#include /* windows系统要加上这个 */#include #include "operateDb.h"#include "status.h"/** 内部数据*/static char const *localhost = NULL; //主机名static char const *userName = NULL;...

    #include

    #include //#include /* windows系统要加上这个 */#include

    #include "operateDb.h"

    #include "status.h"

    /*

    * 内部数据

    */

    static char const *localhost = NULL; //主机名

    static char const *userName = NULL;  //mysql用户名

    static char const *password = NULL;  //它的密码

    static char const *databaseName = NULL; //所要操作的数据库

    /*

    * 外部接口

    *

    *

    * 设置访问数据库参数

    * _localhost -- 访问数据库的主机名

    * _userName -- 访问数据库的用户名

    * _password -- 对应的密码

    * _databaseName -- 要操作的数据库名字

    * 返回结果状态值,如果没有异常返回OK;否则返回ERROR

    */

    STATUS

    InitDbParms( char const *_localhost, char const *_userName, char const *_password, char const *_databaseName )

    {

    if(_localhost == NULL) //检查参数是否有效

    {

    fprintf(stdout, "传递给函数InitDbParms的参数_localhost无效。\n");

    return ERROR;

    }

    if(_userName == NULL)

    {

    fprintf(stdout, "传递给函数InitDbParms的参数_userName无效。\n");

    return ERROR;

    }

    if(_databaseName == NULL)

    {

    fprintf(stdout, "传递给函数InitDbParms的参数_databaseName无效。\n");

    return ERROR;

    }

    localhost = _localhost;

    userName = _userName;

    password = _password;

    databaseName = _databaseName;

    return OK;

    }

    /*

    * 操作数据库

    * commandString -- 存放SQL操作命令

    * 如果操作成功返回OK;否则返回ERROR

    */

    STATUS

    UpdateDatabase( char const *commandString )

    {

    MYSQL the_conn;

    if(commandString == NULL) //检查参数是否有效

    {

    fprintf(stdout, "传递给函数UpdateDatabase的参数commandString无效。\n");

    return ERROR;

    }

    if( mysql_init( &the_conn ) == NULL ) //获取本次连接的句柄

    {

    fprintf(stdout, "Error at mysql_init().\n");

    exit( EXIT_FAILURE );

    }

    if( mysql_real_connect( &the_conn, localhost, userName, password, databaseName, MYSQL_PORT, NULL, 0 ) == NULL ) //连接数据库

    {

    fprintf(stdout, "Error at mysql_real_connect().\n");

    exit( EXIT_FAILURE );

    }

    if( mysql_query( &the_conn, commandString ) != 0 ) //操作数据库

    {

    fprintf(stdout, "Error at mysql_query().\n");

    exit(EXIT_FAILURE);

    }

    mysql_close( &the_conn ); //断开连接

    return OK;

    }

    /*

    * 查询数据库

    * commandString -- 查询sql命令

    * resultpp -- 指向存放查询结果的双指针,注意,如果该参数为NULL,则程序不返回查询的结果。

    * 返回结果状态值,如果操作成功返回OK;否则返回ERROR

    */

    STATUS

    QueryDatabase( char const *commandString, MYSQL_RES **resultpp )

    {

    MYSQL the_conn;

    MYSQL_RES *resultp = NULL;

    if(commandString == NULL) //检查参数是否有效

    {

    fprintf(stdout, "传递给函数QueryDatabase的参数commandString无效。\n");

    return ERROR;

    }

    if(mysql_init( &the_conn ) == NULL) //获取本次连接的句柄

    {

    fprintf(stdout, "Error at mysql_init().\n");

    exit( EXIT_FAILURE );

    }

    if(mysql_real_connect( &the_conn, localhost, userName, password, databaseName, MYSQL_PORT, NULL, 0 ) == NULL) //连接数据库

    {

    fprintf(stdout, "Error at mysql_real_connect().\n");

    exit( EXIT_FAILURE );

    }

    if(mysql_query( &the_conn, commandString ) != 0) //操作数据库

    {

    fprintf(stdout, "Error at mysql_query().\n");

    exit( EXIT_FAILURE );

    }

    resultp = mysql_store_result(&the_conn); //获取查询结果

    mysql_close(&the_conn); //断开连接

    if( mysql_num_rows(resultp) != 0 ) //如果查询结果个数不为0

    {

    if(resultpp == NULL) //判断是否需要返回查询结果

    {

    mysql_free_result(resultp);

    }

    else

    {

    *resultpp = resultp; //返回查询结果

    }

    return OK;

    }

    else

    {

    if(resultpp == NULL)

    {

    mysql_free_result(resultp);

    }

    else

    {

    *resultpp = resultp;

    resultp = NULL;

    }

    return ERROR;

    }

    }

    /*

    ** 释放掉mysql查询的结果所占内存

    **

    ** storagepp -- 指向存放结果的内存的双指针

    ** 返回空。

    */

    void

    FreeTheSearchStorage(MYSQL_RES **storagepp)

    {

    MYSQL_RES *storagep = NULL;

    if(storagepp != NULL)

    {

    storagep = *storagepp;

    if(storagep != NULL)

    {

    mysql_free_result(storagep);

    storagep = NULL;

    *storagepp = storagep;

    }

    }

    }

    展开全文
  • C语言里面的指针变量怎么定义

    C语言里面的指针变量是怎么定义的呢

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

    结果:
    在这里插入图片描述

    展开全文
  • 2.怎么区分全局变量声明和全局变量定义,定义肯定是在所有函数外面,但声明是可以在里面也可以在外面的,而在形式上,定义是int a,但是我看冯艳茹主编《C语言程序设计》国防科技大学出版社2017年6月第一版,这本书讲...
  • 题外话在学计算机相关知识的时候,基本上是离不开C语言的。并且C语言是绝大部分高校计算机相关专业都会学的。往往你说自己是学编程的,别人就基本默认你学过C语言啦。最近看操作系统、算法、计网啥的,发现总会跟C/...
  • 前言上一章节主要是详细介绍了最全面C语言数据基本数据类型解析,不清楚的可以回顾一下哦。本章节主要针对于C语言中的常量以及...换句话说,变量可以定义为在程序执行期间保存相同数据类型值的存储容器。数据类型...
  • C语言全局变量定义方法

    万次阅读 多人点赞 2019-07-09 16:05:46
    C语言全局变量定义方法     今天调试系统的时候,需要定义几个全局位变量定义好后一编译,发现错误一大堆,错误基本都是位变量定义时产生的。以前也定义过全局变量啊,但是先前怎么没错误?...
  • 好久没写C语言了,突然忘记怎么定义全局共享变量了,由于老项目的Code Base都是C的风格,其中又大量用了全局变量,只能跟着糊一坨shit上去了。没办法。 再共享全局变量的global_shared_var.h文件中写入: extern...
  • 结构体Elf32_Ehdr和Elf64_Ehdr成员名称是一样的,在函数中想要... 请问各位大师怎么实现?小弟是个新手,麻烦附上实现代码,非常感谢! ![图片说明](https://img-ask.csdn.net/upload/201709/24/1506220576_69859.png)
  • c语言怎么查看变量的范围When you define a variable in a C program, depending on where you ... 在C程序中定义变量时,根据变量的声明位置,其作用域将有所不同。 This means that it will be available in so...
  • (parameter.c中定义) extern u8 Image_Data[IMG_SCREEN_WIDTH * IMG_SCREEN_HEIGHT]; extern u16 ImagePixel[2048] __attribute__((at(0X68070000))); //图像曲线数据 struct CMOSFlag setflag; 这种类型的...
  • 01怎么定义指针变量1、一般形式类型名 *指针变量名;例子:int *point_1,*point_2;左端的int是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。2、指针变量前面的...
  • 问题在写程序时有时候需要定义一个长度为n的数组,但n是一个变量C语言中一定不可以这样写: #include C语言中无法动态定义一个数组长度[^1]解决思路可以向计算机申请一个长度为n的内存代码如下 一维动态数组的...
  • 问题在写程序时有时候需要定义一个长度为n的数组,但n是一个变量C语言中一定不可以这样写: #include <stdio.h> int main () { int n; scanf("%d",&n); int num[n]; }C语言中无法动态定义一个数组...
  • 以前,一直以为,如果要在函数中定义变量,就必须在函数的前面定义。这样一来,函数用到的局部变量全挤在前面了。 在学习LwIP分析源代码的时候,发现人家外国人(一个叫Adam Dunkels的瑞典人)怎么在函数的中间部分...
  • C语言变量定义与声明的区别(转载) (2012-04-16 21:13) ...在程序设计中,时时刻刻都用到变量定义变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的
  • C语言中全局变量与局部变量的区别是什么呢?我们怎么定义全局变量与局部变量呢。
  • 新建一个C工程,输入如下所述的求和程序选择运行_编译在i=1;这一栏左侧的黑色框处单击鼠标该行整体变成...则输入i),然后单击OK ,如图所示然而窗口却显示出的不是我们想要的值,这是因为只定义了i这个变量,并没有...
  • 我们在程序设计中,时时刻刻都用到变量定义变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:  变量的声明有两种情况:  (1...
  • 51单片机C语言延时函数怎么定义和使用

    万次阅读 多人点赞 2019-01-06 17:38:04
    C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为...
  • 仅仅要求“地盘”就够了吗?在c语言的世界,你不但要给出“我要地盘”这个信号,还要给出“要什么样的地盘”,唯此,编译器才知道如何具体的给你“想要的...首先看下图1定义变量的代码:#includeint main() { int...
  • 我们在做项目时,有时用C语言在单片机里面定义了一个全局变量,但程序运行中出现了一个问题,这个变量经常出现莫名其妙的值。总结为如下几点原因:1、变量的作用域问题:全局变量与局部变量同名重复定义。有可能是你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 546
精华内容 218
关键字:

怎么定义变量c语言

c语言 订阅