const void *a 与 void *const a 的区别

来源:互联网 发布:电脑日历备忘录软件 编辑:程序博客网 时间:2024/05/18 17:04

const void *a

这是定义了一个指针a,a可以指向任意类型的值,但它指向的值必须是常量。

在这种情况下,我们不能修改被指向的对象,但可以使指针指向其他对象。

例如:

const void *a;*a=0x123;//是编译通不过的,因为*a中放的是个const值。const值是不能被改变的。

const int  m=1;     const int n=2;

a=&m;    a=&n;//编译可以通过。

 

void* const  a

这是定义了一个const指针a,a可以指向任意类型的值,但a是指向某个对象的常量指针。

我们不能修改指针中存储的地址,但可以修改指针指向的对象。

例如:

void* const  a;这个定义:*a=0x123;是没问题的,

但是a=(void*)&b;是不行的,因为a是const变量。

如:

int  m=1;     nt n=2;

a=&m;    a=&n;//编译不成功。

 

可以这么说,const void *a;中const修饰的是*a。在void* const  a中,const 修饰的是a。 


static关键字

        当用于不同的上下文环境时,static关键字具有不同的意义。

当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标示符的连接属性,

从external改为internal,但标示符的存储类型和作用域不受影响。用这种方式声明的函数或变量只

能在它们的源文件中访问。

         当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量改为

静态变量,但变量的连接属性和作用域不受影响。用这种方式声明的变量在程序执行之前创建,并

在程序的整个执行期间一直存在,而不是每次在代码块开始执行是创建,在代码块执行完毕后销毁


0 0
原创粉丝点击