当前位置: 亚洲城ca88 > ca88 > 正文

程序猿不及初学者,const关键字指针

时间:2019-08-22 23:17来源:ca88
const关键字和指针,const关键字指针 const和指针相结合的种种状态 多种情形分别如下: int cons *p p本人不是常量,p指向的地方的数码为常量 const int *p p自身不是常量,p指向的地点的多寡

const关键字和指针,const关键字指针

const和指针相结合的种种状态

  多种情形分别如下:

    int cons *p  p本人不是常量,p指向的地方的数码为常量

    const int *p  p自身不是常量,p指向的地点的多寡为常量

    int * const p  p是常量,p指向的地方空间内不是常量

    const int * const p  p是常量,p指向的地方空间也是常量

 

  总结:当const在*左边是,修饰的是p指向的地方的数量,当const在*右边是,修饰的p

 

  当用const修饰一个变量时,在gcc下,依旧能够由此指针修改换量的值

   int main(void)

    {
      const int a = 5;
      //a = 6; // error: assignment of read-only variable ‘a’
      int *p;
      p = (int *)&a; // 这里报告警察方高能够透过强制类型转形成祛除
      *p = 6;
      printf("a = %d.n", a); // a = 6,结果证实const类型的变量被改了

      return 0;

*    }    *

const和指针相结合的各个状态 多种情景分别如下: int cons *p p本人不是常量,p指向的地点的数额为常量...

const int *n;

12. return 关键字

return 用来终止二个函数 并 再次回到其背后随着的值。
return (Val); // 此括号能够简简单单,但一般不省略,特别在回到叁个表明式的值时;
注: 1> 八个函数内得以有四个 return 语句,但独有三个 return 语句被实践
2> return 语句不可重回指向 "栈内部存款和储蓄器" 的 "指针", 因为该内部存款和储蓄器在函数甘休时被电动销毁。

注1:常量指针是说不能经过那一个指针改造变量的值,可是能够透过别的援用来更改变量的值,比如上边这种:

14. volatile 关键字

volatile 是易变的、不安宁的意味。

volatile 关键字 和 const 同样是一种等级次序修饰符,用它修饰的变量表示能够被一些编译器未知的因素改换,比方操作系统、

一、const关键字简要介绍

18. enum 关键字

枚举 与 #define 宏的界别
1> #define 宏常量是在预编译阶段进行简易替换; 枚举常量则是在编写翻译的时候分明其值
2> 一般在编译器里,可以调治将养枚举常量,但不能够调度宏常量。
3> 枚举能够一遍定义大量连锁的常量,而#define 宏 贰遍只好定义贰个。

二、const关键字的用法

const是单词constant的简写,若四个变量前用const修饰,就意味着该变量里的数码足以被访但无法被改换,即该变量是“只读”的。

19. typedef 关键字

注意typedef 与 #define 的区别
#define INT32 int
unsigned INT32 i = 10;// 正确
typedef int int32;
unsigned int32 j = 10;// 编写翻译错误

(二) 10. goto 关键字 一般的话,编码的水平与 goto 语句使用的次数成反比。 个人主张,禁止使用 goto 语句。 11. void 关键字 1、void 修...

int b = 6;

*p = 8;

  1. const修饰函数的再次回到值

注:指针常量指向的地址不可能改换,可是地点中保留的数值是能够更动的,能够通过别的指向该地方的指针来修改,举例:

13. const 关键字

1、const 修饰的只读变量

概念 const 只读变量,具备不可变性。

注: const 修饰的只读变量必得在概念的还要初步化。

2、节省空间,幸免不要求的内部存款和储蓄器分配,同有时候提高功效

编写翻译器经常不为普通 const 只读变量分配内部存款和储蓄器空间,而是将她们保存在符号表中,那使得她改成二个编写翻译器时期的值,未有了积累与读内部存款和储蓄器的操作,使得它的频率也异常高。

3、修饰一般变量

int const i = 2; 或 const int i = 2;

4、修饰数组

只读数组: int const a[5] = {1,2,3,4,5};

const int a[5] = {1,2,3,4,5};

5、修饰指针

const int *p; // p可变, p指向的靶子不可变

int const *p; // p可变, p指向的指标不可变

int *const *p;// p不可变, p指向的对象可变

const int *const *p;// 指针p和p指向的靶子都不可变

6、修饰函数的参数

当不愿意参数值在函数体内被意外改造时使用。

例: void Fun(const int i);

7、修饰函数的再次回到值

1> const 修饰符也能够修饰函数的再次回到值,重临值不可被改变。

例: const int Fun(void);

2> 在另一总是文件中引用 const 只读变量

extern const int i;// 正确的宣示

extern const int j = 10;// 错误,只读变量的值无法改变

const定义的常量在程序的运作进度中独有一份拷贝(因为是大局的只读变量,故存在静态区);而#define定义的常量在内部存款和储蓄器中有几多个拷贝

ca88,10. goto 关键字

貌似的话,编码的水平与 goto 语句使用的次数成反比。
个体主见,禁用 goto 语句。

int a = 5;

11. void 关键字

1、void 修饰函数重返值和参数

1> 假如函数没有再次回到值,那么应将其宣称为void 类型。

2> 要是函数无参数,那么应注脚其参数为void

2、void 指针

1> 不能对void 指针实行算法操作

2> 要是函数的参数能够使大肆档案的次序指针,那么应注脚其参数为 void*

3、void不可能代表贰个真真的变量

ca88 1

15. extern 关键字

当引用另二个文本中定义的变量或函数时,使用 extern 实行宣示

ca88 2

int * const n = &a;

16. struct 关键字

struct 是叁个神奇的最主要字,它将一部分相关联的数目打包成二个一体化,方便使用。
1、结构体的尺寸
2、柔性数组

const int n = 5;

C语言关键字 (二)

const char *str = GetString(); /*正确*/三、const与宏定义#define的区别

  1. 用来修饰局地变量

int a = 5;

const int * const p;/*针对常量的常指针*/

const int *n = &a;

int const *n; /*是常量指针*/

17. union 关键字

union 关键字的用法与 struct 的用法极其左近。
union 维护丰硕的半空中来放置几个数据成员中的 "一种",并非为各种数据成员配置空间。在union中具备的数额成员公用一个上空,同期只可以存款和储蓄其中二个数量成员,全部的多寡成员具备同样的原初地址。

指南针常量 是说指针本人是个常量,不可能再指向其余的地方,比如:

相应改写为:

int *p = &a;

a = 6;

const功能高,因为编写翻译器平常不为普通const常量分配内部存款和储蓄器,而是保存在符号表中,未有了积存与读取的操作,成效异常高

int * const n;/*是指针常量*/

注2:常量指针的值不能够退换,但那不意味着指针本身不可能改造,常量指针能够针对任何的地点,比如上面这种:

瞩目:在行使const修饰变量时,绝对要给变量开端化,不然之后就不能赋值了!

#define宏是在预管理阶段实行,而const常量在编写翻译运营阶段

当用以下语句来接收函数再次来到值时将出错:

1)幸免予修业改指针指向的内容,如:

  1. const修饰函数的参数

比方,若有如下函数:

const char* GetString;

void swap(int * const p1, int * const p2);

int a = 5;

常量指针 是说指针指向的剧情是常量,举个例子:

char *str = GetString(); /*错误*/

int const *n; /*双方等价*/

本着常量的常指针:指针指向的职务不可能退换且也不可能通过那些指针改换变量的值。(可是还能用别样的家常指针改变变量的值)

  1. 常量指针与指针常量

2)制止予修业改指针所指向的地点,如:

常量指针、指针常量一会儿就把人绕晕了,那么什么样区分他们啊?别急,请往下看。

const int *n = &a;

宏定义只是对值实行简要的更迭,不举行项目检查;而const有切实可行的品类,在编写翻译阶段会进展项目检查

三个大约的艺术是看 * 的岗位,假使咱们将 * 读作“指针”,将 const 读作“常量”的话,则正好能够依照双方的前后相继来辨别,举例:

int const n = 5;/*四头是等价的,均表示变量n的值不可能被改成了*/

ca88 3

n = &b;

例如:

void StringCopy(char *dst, const char *src);

int * const n; /*指南针常量*/

编辑:ca88 本文来源:程序猿不及初学者,const关键字指针

关键词: 亚洲城ca88