[C语言指针基本概念及其指针变量的定义是什么]我们知道变量e79fa5e98193e59b9ee7ad9431333332633039在计算机内是占有一块存贮区域的,变量的值就存放在这块区域之中, 在计算机内部, 通过访问或修改这块区域的内容来访问或修...+阅读
全局变量的定义为本函数和其他函数所共用。
const定义是指使用类型修饰符const说明的类型。
一、全局变量
1. 全局变量是编程术语中的一种,源自于变量之分。
2. 变量分为局部与全局,局部变量又可称之为内部变量。
3. 变量由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
4. 全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。
5. 全局变量是可以被本程序所有对象或函数引用。
二、CONST(C中的CONST)
1. const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。
2. const它限定一个变量不允许被改变,产生静态作用。
3. 使用const在一定程度上可以提高程序的安全性和可靠性。
4. 清晰理解const所起的作用,对理解对方的程序也有一定帮助。
5. CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。
C语言对const使用该如何理解
展开全部
const int *pointer=array;
这里的 pointer是常量指针 它指向固定的的内存单元,并且不能指向别的内存单元 但可以改变内存里的值 可以通过*运算符 比如*(pointer)=1 即给数组的第一个元素赋值为1;
而用你的方法,int *pointer1=(int*)pointer; 其实是把 const * int 类型的 指针强行转换成了int*,所以pointer1即是int*类型的了 所以可以通过指针访问,但这种做法不好 不安全。
你所说的 int* const pointer; 最好写成int const *pointer; 他是声明一个指向常量的指针,也就是说,指针指向的内存单元可以改变 但里面的值不能改变,这也就是要在声明处赋值的道理。如果一定要赋值
那可以这样
#include
main()
{
int a;
a=3;
int const *p=&a;
a=2;
cout<}
你可以修改a的值 当a修改的同时 改变了 p指向的内存里的值 ,但却不可以用*p来修改,
关于c语言里面的const
char *cp;
定义了一个指针变量,指向char
const char *ccp
定义了一个指针变量,指向const char。和上面不同的是,你不能修改ccp所指向的东西的值。
也就是说,像下面这样的语句是非法的。(假定ccp已经初始化过,指向某处了),编译器会报错。
*ccp = 'a'; // 试图修改ccp所指区域。
把cp赋值给ccp是安全的。
因为cp指向一个可以读写的地址,而ccp保证只对那个地址读,而不向那个地址写。
相反,把ccp赋值给cp是不安全的。
因为ccp指向的是一个不希望被写的区域。而cp却没有保证说他一定不会去写他所指的区域。
cp的使用者完全有权利这样做
*cp = 'a'; // 这是完全合法的操作
但是,当他这样做的时候,原先ccp指向的,不希望被改写的部分,被修改了。
所以编译器会提出警告。
C中const的用法详解
C中的CONST C中CONST的使用: const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。 问题:const变量 & 常量 为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? const int n = 5; int a[n]; 答案与分析: 1)、这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5, “abc”,等,肯定是只读的,因为因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。
而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时维度必须是“常量”,“只读变量”也是不可以的。 2)、注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定限制了它。 3)、那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。
问题:const变量 & const 限定的内容 下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢? typedef char * pStr; char string[4] = "abc"; const char *p1 = string; const pStr p2 = string; p1++; p2++; 答案与分析: 问题出在p2++上。 1)、const使用的基本形式: const char m; 限定m不可变。 2)、替换1式中的m, const char *pm; 限定*pm不可变,当然pm是可变的,因此问题中p1++是对的。 3)、替换1式char, const newType m; 限定m不可变,问题中的charptr就是一种新类型,因此问题中p2不可变,p2++是错误的。 问题:const变量 & 字符串常量 请问下面的代码有什么问题? char *p = "i'm hungry!"; p[0]= 'I'; 答案与分析: 上面的代码可能会造成内存的非法写操作。分析如下, “i'm hungry”实质上是字符串常量,而常量往往被编译器放在只读的内存区,不可写。
p初始指向这个只读的内存区,而p[0] = 'I'则企图去写这个地方,编译器当然不会答应。 问题:const变量 & 字符串常量2 请问char a[3] = "abc" 合法吗?使用它有什么隐患? 答案与分析: 在标准C中这是合法的,但是它的生存环境非常狭小;它定义一个大小为3的数组,初始化为“abc”,,注意,它没有通常的字符串终止符'\0',因此这个数组只是看起来像C语言中的字符串,实质上却不是,因此所有对字符串进行处理的函数,比如strcpy、printf等,都不能够被使用在这个假字符串上。 问题5:const & 指针 类型声明中const用来修饰一个常量,有如下两种写法,那么,请问,下面分别用const限定不可变的内容是什么? 1)、const在前面 const int nValue; //nValue是const const char *pContent; //*pContent是const, pContent可变 const (char *) pContent;//pContent是const,*pContent可变 char* const pContent; //pContent是const,*pContent可变 const char* const pContent; //pContent和*pContent都是const 2)、const在后面,与上面的声明对等 int const nValue; // nValue是const char const * pContent;// *pContent是const, pContent可变 (char *) const pContent;//pContent是const,*pContent可变 char* const pContent;// pContent是const,*pContent可变 char const* const pContent;// pContent和*pContent都是const 答案与分析: const和指针一起使用是C语言中一个很常见的困惑之处,在实际开发中,特别是在看别人代码的时候,常常会因为这样而不好判断作者的意图,下面讲一下我的判断原则: 沿着*号划一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
你可以根据这个规则来看上面声明的实际意义,相信定会一目了然。 另外,需要注意:对于const (char *) ; 因为char *是一个整体,相当于一个类型(如 char),因此,这是限定指针是const。[编辑本段]C++中CONST C中常用:“ #define 变量名 变量值”定义一个值替代,然而却有个致命缺点:缺乏类型检测机制,这样预处理在C++中成为可能引发错误的隐患,于是引入const. const使用: 1. 用于指针的两种情况:const是一个左结合的类型修饰符. int const *A; //A可变,*A不可变 int *const A; //A不可变,*A可变 2.限定函数的传递值参数: void function(const int Var); //传递过来的参数在函数内不可以改变. 3.限定函数返回值型. const int function(); //此时const无意义 const ...
以下为关联文档:
C语言定义全局字符串二维数组帮你写了一个: #include <stdio.h> char name[10][20]; void inPut() { int i; printf("请输入十个学生的名字!\n"); for (i=0; i<10; i++) { scanf("%s", &name[i]); } } void outP...
C语言中如何定义全局变量1、首先,我们可以在函数外面定义变量,就是全局变量。 2、局部变量可以与全局变量同样命名。 3、但是优先级是局部变量优先。 4、但是局部变量的生命周期是整个结构内。 5...
PHP静态全局变量和普通全局变量有什么区别以前在远标了解过全局变量与全局静态变量的区别: (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。 (b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全...
C语言中把变量定义在主函数之外和定义在主函数之内有什么区别在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下: 变量的声...
请教高手 C语言中把变量定义在主函数之外和定义在主函数之内有两者的区别只在于作用域和生存周期。main函数是一个进程的入口,此外,和别的函数无区别。 1、main函数里定义的是局部变量,只是在main函数里有效。 2、如果程序里有多个函数,定义...
C语言中定义常数变量怎么定义用define的那种因为define是一种宏定义,所以他属于一种全局类型,不需要在函数中定义,只要在源代码开头定义的话,整个源文件都可以使用该变量,假如要要定义常数π,那就#define pi 3.1415926就可以...
c语言全局变量可声明问题如果static和extern都没有,表示定义一个全局变量,其作用域限制在从定义开始到当前文件结尾。 static的作用是将全局变量的作用域限制在从定义开始到当前文件结尾,且其他文件不...
在c语言里变量的定义和声明int a;和int a=1; 这两个既可以叫声明,也可以叫定义, “int a=1;”相当于“ int a;a=1;”两条语句, “int a;”是简单地定义一个变量,编译器会为其在内存中分配一个内存单元,该内存单...
求助C语言全局变量作用域求助C语言全局变量作用域,在C语言中什么是变量的作用域?什么是同名异值:这样理解 :第一个num 是全局变量,它在所有的程序中都存在, 子函数中的num 是形参 属于局部变量 它的作用域...