C语言中const和数组】的更多相关文章

C语言中const的用法 const:在定义变量时,如果使用关键字const,那就表示限制这个变量值不允许被改变. (1)     修饰变量 const离谁越近,谁的值就不能改变. int const a=0 声明一个变量a,把0赋值给a,用const修饰之后,a再也不能被赋其他值.此时int const a=0等价于const int a=0. 注:int const a; a=0; 这样的写法是错误的,因为a已经被const修饰,不能被赋值了. (2)     修饰指针 int const…
1. const 在C和C++中的区别     C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中. 所以在C++中const修饰的量可以用在数组的定义中.       而在C中,const是一个不能被改变的普通变量,既然是变量,就要占用存储空间,所以编译器不知道编译时的值.而且,数组定义时的下标必须为常量.       在C语言中: const int size; 这个语句是正确的,因为它被C编译器…
C-C++到底支不支持VLA以及两种语言中const的区别 到底支不支持VLA VLA就是variable-length array,也就是变长数组. 最近写程序的时候无意间发现,gcc中竟然支持下面这种写法: int n = 10; int a[n]; 注意上面的语句是在函数内部写的,也就是n和a都是自动变量. 当时十分疑惑,C语言中数组的长度不应该是常量或常量表达式吗?为什么变量也可以.我将代码在VC中跑了一下,发现编译出错,提示数组的大小未知,说明VC中是不支持VLA的. 那既然有的编译器…
一.说明指针常量.指向常量的指针和指向常量的常量指针的含义.区别和共同点 首先,以上三种概念的共同点:都指的是指针 指针也是一种变量,它存储指定类型的变量的内存地址,如char* 来声明一个字符型指针变量,跟其它变量一样,当其值不可改变时,该指针变量就成为了指针常量,既是常量,它当然一直指向同一个内存地址,而不能被改变. 指向常量的指针顾名思义就是说其指向的那个地址的值不是变量而是常量了,即其指向的内存地址的内容将不能被改变,而指针本身则可以改变.     指向常量的指针常量最好理解,结合以上两…
      const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助.     我们来分情况看语法上它该如何被使用.     1.函数体内修饰局部变量.     例:     void func()     {         const int a=0;     }     首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变…
今天看<Linux内核编程>(Claudia Salzberg Podriguez等著)时,文中(p39)有一个错误,就是关于const的用法. 原文中举例说明:const int *x中x是一个指向const整数的指针,因此可以修改该指针,不可以修改这个整数.而在int const *x中,x却是一个指向整数的const指针,因而这个整数可以改变,但是指针不可以改变.本来我也对这个不是很懂,于是就写了个测试例子测了一下: 测试一,const int *x,代码如下: ,a=; const i…
关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理,所以说const的存在一定有它的合理性,与预编译指令相比,const修饰符有以下的优点: 1.预编译指令只是对值进行简单的替换,不能进行类型检查 2.可以保护被修饰的东西,防止意外修改,增强程序的健壮性 3.编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编…
自己上网查的资料. 可以定义const常量,具有不可变性.例如:const int Max=100; Max++会产生错误; 便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患.例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改: 可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改. 同宏定义一样,可以做到不变则已,一变都变!如(1)中,如果想修改Max的内容,只需要它修改成:const int Max=yo…
最近一直在准备笔试,补补大一大二欠下的课.复习c语言时碰见这么个题:   1 2 3 4 5 int a=248, b=4; int const c=21; const int *d=&a;  int *const e=&b; int const * const f =&a;  请问下列表达式哪些会被编译器禁止? A:*c=32 B:*d=43 C:e=&a D:f=0x321f E:d=&b F:*e=34 下面逐条分析第一行代码不提, 第二行,int const…
代码演示 package main import "fmt" func main() { var a [5]int fmt.Println("emp:", a) a[4] = 100 fmt.Println("set:", a) fmt.Println("get:", a[4]) fmt.Println("len:", len(a)) b := [5]int{1, 2, 3, 4, 5} fmt.Print…
  在.c文件中有程序: int main() { int const a = 10; a=20; printf("a=%d\n",a); return 0; } 编译就知道C语言编译器会报错,说变量a是常量,常量是不能当左值的,这样看来,好像a是定义的一个常量,不能修改! 修改程序: int main() { int *p; int const a=10; p=(int*)&a; *p=20; printf("a=%d\n",a); return 0; }…
注意:C语言中的const和C++中的const是有区别的,并且在使用VS编译測试的时候. 假设是C的话.请一定要建立一个后缀为C的文件.不要是CPP的文件. 由于.两个编译器会有区别的. 一.C语言中的const比較常见的使用方法.const做常量 #include<stdio.h> #include<malloc.h> #include<string.h> /* C中的const使用方法(使用VS測试的时候,要注意建立一个C后缀的文件,由于C的编译器和C++的编译器…
C语言中,数组名作为参数传递给函数时,退化为指针   C语言中,数组名作为参数传递给函数时,退化为指针:需要数组大小时, 需要一个参数传数组名,另一个传数组大小. 数组名做函数参数时,就相当于指针了.sizeof对指针操作结果应该是4.  一般函数参数为数组时,可以有两个参数,一个数组名,一个数组长度的. 首先C语言里面不支持数组作为形参来进行调用, 例如函数void fun(int a[]);里面的a实际上在进行编译时,是作为指针来处理的,所以上面的函数完全等价于void fun(int *a…
一 写在开头 1.1 本节内容 本节主要内容是有关C语言中qsort()函数的探讨. 二 问题和相应解决方法 qsort()是C标准库中的一个通用的排序函数.它既能对整型数据进行排序也能对浮点型数据进行排序.今天在写C语言程序时遇到了一个奇怪的事情.在使用qsort()对double型数据排序时,我发现qsort()竟然没有排序成功,数组中的数据仍然是乱序的!比如下图所示的这个程序. 上面这个程序的输出结果为:1.72 1.78 1.61 1.65 1.70 1.56.和原始输入数据顺序一致.也…
有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小.为了满足这一要求,可以使用const关键字对变量加以限定: const int MaxNum = 100; //班级的最大人数 这样 MaxNum 的值就不能被修改了,任何对 MaxNum 赋值的行为都将引发错误: MaxNum = 90; //错误,试图向 const 变量写入数据 我们经常将 const 变量称为常量(Constant).创建常量的格式通常为…
Const是什么? const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助. Const修饰变量 我们可以看到一旦被修饰就不能被赋值改变. 指针中的const使用 指针是一个变量  指针里面有两个变量一个是指针本身 一个是指针所指的变量如图1 指针本身可以是const,指针所指的变量本身也可以是cost,我们来往下看两种情况的使用与不同指出.const 只适…
int access(const char *filename, int amode); amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-. 这个函数还可以检查其它文件属性: 06     检查读写权限 04     检查读权限 02     检查写权限 01     检查执行权限 00     检查文件的存在性而这个就算这个文件没有读权限,也可以判断这个文件存在于否存在返回0,不存在返回-1 windows下_mkdir函数 #include<direct.h>…
本文是通过几篇转帖的文章整理而成的,内容稍有修改: 一. C语言中,为什么字符串可以赋值给字符指针变量 char *p,a='5';p=&a;                     //显然是正确的,p="abcd";              //但为什么也可以这样赋值?? 问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点!   答: 双引号做了3件事:  1.申请了空间(在常量区),存放了字符串 2. 在字符串尾加上了'/0'    3.返回地址 你这里…
转载于:http://www.cnblogs.com/KingOfFreedom/archive/2012/12/07/2807223.html 本文是通过几篇转帖的文章整理而成的,内容稍有修改: 一. C语言中,为什么字符串可以赋值给字符指针变量 char *p,a='5';p=&a;                     //显然是正确的,p="abcd";              //但为什么也可以这样赋值?? 问:一直理解不了为什么可以将字串常量赋值给字符指针变量,…
C语言中string -- ::) 转载 ▼ 标签: 操作符 int char c语言 类型转换 分类: C/Cpp ,char型数字转换为int型 "; printf(]-');//输出结果为3 ,int转化为char *********************************** linux c *********************************** ()字符串转换成数字,用atoi,atol,atof,分别对应的是整型,long型,double型.以整型为例: &q…
摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此,使得std::array有很多与其他容器不同的特殊之处,比如:std::array的元素是直接存放在实例内部,而不是在堆上分配空间:std::array的大小必须在编译期确定:std::array的构造函数.析构函数和赋值操作符都是编译器隐式声明的--这让很多用惯了std::vector这类容器的程…
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息.(生成.exe文件) 编译器在编译时是以C文件为单位进行的,也就是…
C语言中qsort函数用法-示例分析    本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort函数包含在<stdlib.h>的头文件里,本文中排序都是采用的从小到大排序. 一.对int类型数组排序 int num[100]; int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(n…
工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time函数时,看到相关time   函数的文章,粘贴如下: ------------------------- from:http://blog.csdn.net/wangluojisuan/article/details/7045592 c语言中time函数的用法 标签: 语言ctimerstruct日…
system()函数功能强大,很多人用却对它的原理知之甚少先看linux版system函数的源码: #include <sys/types.h> #include <sys/wait.h> #include <errno.h> #include <unistd.h> int system(const char * cmdstring) { pid_t pid; int status; if(cmdstring == NULL){ ); } ){ status…
void在英文中作为名词的解释为“空虚:空间:空隙”:而在C语言中,void被翻译为“无类型”,相应的void *为“无类型指针”.void似乎只有“注释”和限制程序的作用,当然,这里的“注释”不是为我们人提供注释,而是为编译器提供一种所谓的注释. 本文地址:http://www.cnblogs.com/archimedes/p/c-void-point.html,转载请注明源地址. void的作用: 1.对函数返回的限定,这种情况我们比较常见. 2.对函数参数的限定,这种情况也是比较常见的.…
许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和void 指针类型的使用方法及技巧. 1.首先,我们来说说void 的含义: void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据. void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义: void a; 这行语句编译时会出错,提示“illegal use of type ’void’”…
转自:C语言中的static变量和C++静态数据成员(static member) C语言中static的变量:1).static局部变量        a.静态局部变量在函数内定义,生存期为整个程序运行期间,但作用域与自动变量相同,只能在定义该变量的函数内使用.退出该函数后, 尽管该变量还继续存在,但不能使用它.        b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值.而对自动变量不赋初值,则其值是不定的.2).static全局变量        全局变量本身就是静…
C语言中的fread和fwrite是专门用来操作文件的方法. 1. fread负责从打开的文件指针中读取文件内容. 函数原型:size_t fread(void *p, size_t size, size_t num, FILE *fp); 参数*p:一个指针,通常是字符串指针,也可以是一个数组,用来存放从文件流中读取的数据: 参数size:表示读取一个单位元素的大小,以字节为单位,比如sizeof(char)或者sizeof(int)等: 参数num:表示一次单位元素的数量,和size参数一样…
转自对C语言中sizeof细节的三点分析 1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行. 那么如果编程中验证这一点呢?ps:这是前两天朋友淘宝面试的一道题,北庚理解: #include<iostream> using namespace std; int main() { int i=1; cout<<i<<endl; sizeof(++i); cout<<i<<endl; return 1;…