C语言之const与指针
2017-05-14 21:29
204 查看
const大家一定都不陌生,是一个用来修饰变量的类型,在C语言中const和指针的考点一直是面试题的热门,乘此机会,我来趴一趴这个神奇的家伙
const 和非 const 类型转换
因为通过 str1 不能修改数据,而赋值后通过 str2 能够修改数据了,意义发生了转变,所以编译器不提倡这种行为,会给出错误或警告。
也就是说,const char 和char 是不同的类型,不能将const char 类型的数据赋值给char 类型的变量。但反过来是可以的,编译器允许将char 类型的数据赋值给const char 类型的变量。
这种限制很容易理解,char 指向的数据有读取和写入权限,而const char 指向的数据只有读取权限,降低数据的权限不会带来任何问题,但提升数据的权限就有可能发生危险。
C语言标准库中很多函数的参数都被 const 限制了,但我们在以前的编码过程中并没有注意这个问题,经常将非 const 类型的数据传递给 const 类型的形参,这样做从未引发任何副作用,原因就是上面讲到的,将 非const 类型转换为 const 类型是允许的。
下面是一个将 const 类型赋值给非 const 类型的例子:
出错原因是如果成功,那么意味着可以通过str2修改str1,这就麻烦了,所以编译失败。
将非const赋值给const型
通过原因:因为不可能通过const去修改str2,同时假设可以的话对于str2也是没任何毛病,所以就通过编译了。
总结:这个知识点一直是面试的热门问题,万一笔试有呢,万一有呢,所以还是要做好总结,不过我现在有个小小的问题
问题
假设
若
若
好吧,没问题了 (这里有重大问题,待/_ \哥好好看完c指针再来完善下)
const char*str1; char*str2;
const 和非 const 类型转换
因为通过 str1 不能修改数据,而赋值后通过 str2 能够修改数据了,意义发生了转变,所以编译器不提倡这种行为,会给出错误或警告。
也就是说,const char 和char 是不同的类型,不能将const char 类型的数据赋值给char 类型的变量。但反过来是可以的,编译器允许将char 类型的数据赋值给const char 类型的变量。
这种限制很容易理解,char 指向的数据有读取和写入权限,而const char 指向的数据只有读取权限,降低数据的权限不会带来任何问题,但提升数据的权限就有可能发生危险。
C语言标准库中很多函数的参数都被 const 限制了,但我们在以前的编码过程中并没有注意这个问题,经常将非 const 类型的数据传递给 const 类型的形参,这样做从未引发任何副作用,原因就是上面讲到的,将 非const 类型转换为 const 类型是允许的。
下面是一个将 const 类型赋值给非 const 类型的例子:
#include <stdio.h> void func(char *str){ printf("%s",str); } int main(){ const char *str1 = "friend"; char *str2 = str1; func(str2); return 0; }
出错原因是如果成功,那么意味着可以通过str2修改str1,这就麻烦了,所以编译失败。
将非const赋值给const型
#include <stdio.h> void func(char *str) { printf("%s",str); } int main(){ const char *str1; char *str2= "friend"; str1=str2; func(str2); return 0; }
通过原因:因为不可能通过const去修改str2,同时假设可以的话对于str2也是没任何毛病,所以就通过编译了。
总结:这个知识点一直是面试的热门问题,万一笔试有呢,万一有呢,所以还是要做好总结,不过我现在有个小小的问题
问题
假设
int *a,*b;
*a=10,*b=20;
若
a=b;那么*a就是20了,是a指向了b的地址,所以a的内容改变了。这个时候若*b=200,那么*a也是200了,但是改变*a的值,*b是不会变的
若
b=a;那么*b就是10了,是因为b指向了a,那么改变*a=100,*b也会改变为100吧,但是改变*b的值那么*a也会纹丝不动的。
好吧,没问题了 (这里有重大问题,待/_ \哥好好看完c指针再来完善下)
相关文章推荐
- C语言中的const用法以及常量指针与指针常量(有口诀!)
- C语言--const和指针
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- c语言:对于一个变量n,const用法和指针的比较
- C语言指针(3)~const关键字与指针
- C语言的const关键字与指针搭配使用
- c语言中const 类型变量地址赋值给指针。
- C语言--const修饰指针解析
- C语言里的const和指针修饰关系
- C语言的const和指针
- C语言中const与指针的指针
- C语言--const修饰指针解析
- C语言中关于const与指针结合的理解
- C语言中const与指针使用方法总结
- c语言的指针、数组和常量修饰符const
- C语言之const常量(摘自C和指针)
- C语言 const 指针使用技巧之——返回指针的函数
- C语言--const修饰指针解析
- c语言---const搭配指针问题
- const和指针(C语言)