首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

const与指针交集的那些事

指针也是一个变量,它有它的地址,也有自己的值,只不过它的值是别人的地址。而且这个值是可以改变的。 1.const修饰指针 常量指针:指针指向的值不可以改,指针的指向是可以更改的。...=&a; //const修饰指针,指针指向的值不可以改,指针的指向可以改 // *p=20;错误 cout 指针指向的值:"<< *p <<endl; p=&b; cout 指针指向后的值...2.const修饰常量 指针常量:指针的指向不可以更改,但指针指向的值是可以更改的。...//指针的指向不可以改,指针指向的值可以改 int *const p1=&a; *p1=111; //p2=&b;错误 cout 指针指向的值:"<< *p1 <<endl; return...3.const修饰指针和常量 常量指针常量:指针的指向和指向的值都是不可以更改的。

29941
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    const修饰的双重指针赋值解惑

    ---- 已启动生成: 项目: oj1511, 配置: Debug Win32 ------ 1>生成启动时间为 2014/4/9 10:48:22。...原来还是const修订符搞的怪: 第一段代码中: cp是一个指向char类型的指针。...ccp是一个const修饰符修饰的指向char类型的指针,也就是说,它指向的是char类型,但是指针本身是不可修改的。...也就是说: ccp是一个指向有const修饰符的指针,cp是一个指向没有const修饰符的指针。ccp中包含了cp的所有修饰符(其实cp就没啥修饰符),因此可以进行赋值。...这样,我们看一下面的代码: c是一个指向char类型指针的指针。 cc是一个指向const修饰符修饰的char类型的指针的指针。 cc 与 c指向的内容并不相同,因此无法进行赋值操作。

    1K90

    函数指针,指针函数,返回值为指针的函数「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 摘要: 在学习C语言时,一个比较容易混淆的概念就是函数指针、指针函数、返回值为指针的函数。本文将对这三个概念进行区分。...指针函数就是返回值为指针的函数,两个本质上是同一事物,只是叫法不同。函数指针就是一个指向函数的指针,本质上是一个指针,只是这个指针指向的对象是函数,而不是一般意义上的存储对象。...正文: 指针函数 指针函数就是返回指针值的函数,本质是一个函数。所以指针函数等价于“返回值为指针的函数”。...对于一个返回值为指针的函数,不能返回auto型局部变量的地址,但可返回static型变量的地址。...之所以容易混淆指针函数和函数指针,是因为指针函数的形式如一般指针变量类型,如:int *x、int *y()、int(*z)() 这里x和z表示一个指针,而y则表示一个函数,所以要注意区分指向变量的指针和指向函数的指针的形式区别

    3K10

    【C语言】const修饰指针的不同作用

    const修饰变量 变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。...请看下一个章节进行讲述用const修饰指针变量来进行实现该问题。 const修饰指针变量 下面通过四个例子对比来得到关于const修饰指针变量的不同方式所得到的不同结论。...在const在*左边时,意思是指针p指向的n是一个用const修饰的变量,所以通过*p无法对n进行修改。...结论 • const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。但是指针变量本⾝的内容可变。...• const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容(指针指向)不能修改,但是指针指向的内容,可以通过指针改变

    10810

    C++函数指针、指针函数、返回值为函数指针的函数浅谈

    C++函数指针、指针函数、返回值为函数指针的函数浅谈 引言 函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。...而返回值为函数指针的指针函数就更难理解了,放在文章的最后来介绍。 函数指针 函数指针是一种特殊的 指针,它指向函数的入口。...指针函数是一种返回值为指针的 函数。...例如A *createA();声明了一个返回值为指向A类型的指针的,参数列表为空的函数(这句话读起来可能有一··绕口),实例说明 /** * 作者:lyn * 时间:2018.10.30 * 该程序用来演示指针函数...return 0; } 返回值为函数指针的函数 其实在搞懂了函数指针和指针函数后,这个概念并不难懂,其实这就是一个复杂一点的指针函数,因为他的返回值为函数指针。

    1.6K10

    指针讲解:*&p和&*p 及const的用法总结

    比如int p =10;那么*&p = *(&p) = p = 10(即从p的地址取值),而&*p = &(*p) 则非法,因为p=10,*10是取内存地址为...---- (1)const int *p; int const *p; //含义是指向常量的指针,指针的常量值不可以修改 两者相同,p是一个指向整形常亮的指针,可以修改指针的值,但不能修改指针所指向的值...简单的判断的方法: 如果const在 * 的左侧,则const用来修饰指针所指向的变量,即指针指向位常量; 如果const位于 * 的右侧,则const就是修饰指针本身,即指针本身就是常量。...2、const和指针 用const修饰指针有以下几种情况 3、保护函数参数不被改变 用const修身函数的参数,可以保证该参数的值在函数内部不被改变。 但是一般const修饰的参数都有哪些呢?...要想const定义的对象变量能被其他文件调用,定义时必须使用extern修饰为 extern const int val; void function() const{} // test1107.cpp

    59810

    const修饰符的使用(修饰结构体指针,引用外部的const 变量)

    const修饰符的使用 //const修饰变量为只读 const int a = 10; a = 20;//是错误的赋值 //指针变量 指针指向的内存 两个不同的概念 char buf[] =..."helloworld"; //从左往右看,跳过类型,看修饰那个字符 //如果是*,说明指针指向的内存不能改变 //如果是指针变量,说明指针的指向不能改变,指针的值不能修改 const char *p...是对指针指向的内存空间的内容进行封锁。 const封锁的是指针变量,不能修改其指向,但是可以修改指针指向内存当中的内容。...//结构体指针的指向不可以修改 p = NULL是错误的 //结构体指针指向的内容可以修改 p->a = 10是可以修改的 } void fun4(const my_struct * const...p) { //结构体指针的指向不可以修改 //结构体指针指向内存当中的内容也不可以修改 } 如何引用其他.c文件中的const变量 extern const int a;//注意,不能再进行赋值

    55010

    c和c++的区别(二)const和引用、一级指针、二级指针的结合

    一、const和一级指针的结合 一级指针的模型 一级指针有两种表达方式,p和*p。所以const与一级指针有两种结合方式。 //在c++语法规则中,const修饰距离它最近的类型。...对于const int* p,其类型为const int*,不管存储的常量的地址 还是变量的地址,都按照其类型存储,即const int*,即使是存储 的是变量的地址也会提升为常量的地址。...const int &a=10;//可以看作是下边两行代码 const int temp=10; const int &a=temp; 指针变量与常引用结合 如现在要向地址为0x0011ff22内存块写入...三、const和二级指针的结合 二级指针的模型 二级指针有三种表达方式,即q、*q和 **q,所以const和二级指针最基本的结合方式有三种。...`int** `转化为`const int**`错误 5.当const为`**`之间时,`*const*退化为一级指针考虑。`

    46820

    assert断言与const修饰指针的妙用(模拟实现strcpy函数)

    ;如果判断为假,那么直接终止程序,并且报错,assert断言的好处还在于报错时能够精准定位到哪一行出现了问题,所以程序员看到assert断言还是非常亲切的。...const修饰指针的妙用 主要用法 按照const在*左边,在*右边,可以分为两大类。...const在*左边 限制的是指针指向的内容,不能通过指针变量改变指针指向的内容,但是指针变量本身是可以改变的 比如指针p指向的内容不可以改变,但是指针p本身是谁的地址是可以改变的 const在*...灵魂总结: 左定值,右定向 断言和const修饰指针的应用 讲了这么多关于断言和const修饰指针的知识,那就让我们来实践一下 模拟实现C语言strcpy函数 我们已知函数的参数有两个,将后面的字符串内容拷贝到前面去...可以看出,在设定这个函数时,就已经考虑到被拷贝的字符串的内容不能改变,所以就需要const来修饰指针,并且在*的左边,使得指针指向的内容不会更改。

    8610

    C++的引用与const指针的关系以及各种传递方式

    首先我们知道 const int *p 与 int const *p 是一样的,即 *p 是常量;而 int * const p 跟上面是不一样的,即 p 是常量;我们知道引用只是一个别名,与变量共享存储空间...其实引用的底层就是用const指针来实现的。...(name mangling),而const 引用如 const int & 呢我们也可以类比为  const int * const p 即既不能成为别的变量的引用,也不能通过引用更改变量的值。...引用经常作为函数的参数传递,可以与值传递,以及指针传递做个比较: 值传递: 实参初始化形参时要分配空间, 将实参内容拷贝到形参 引用传递: 实参初始化形参时不分配空间 指针传递:本质是值传递,但如果我们要修改指针本身...,那只能使用指针的指针了,即 **, 或者指针引用 *& 而且使用指针比较不保险的是很多人会忘记加上const的限制,即很可能接下来的程序中你又把这个指针指向了其他的变量,这样就混乱了。

    83770

    指针详解(const、指针运算、数组名的理解、传址调用和传值调用、一维数组的本质​)(一)

    一、const修饰指针 const修饰指针 const(常量,不变) 问:被const是否修饰的变量是否有其他方法修改值?...printf("a = %d\n", a); return 0; } const修饰指针的时候 1.const可以放在*的左边 2.const可以放在*的右边 1.const放在*的左边 int...*p是p指向的空间 4.const放在*的左边,限制的是*p,意思是不能通过修改指针变量p修改p指向空间的内容。...1.首先,arr被解析为指向数组首元素的指针。在内存中,数组的元素是连续存储的,而数组名实际上是一个指向数组首元素的指针。因此,通过arr可以找到数组的起始位置。...3.arr[i]中的[]是索引运算符,用于访问数组中的元素。它表示将数组名arr解析为指向数组首元素的指针,并使用索引i进行偏移,以访问数组中第i个元素的值。

    19610

    Golang 方法接收者为值与指针的区别

    方法接收者为对象的指针与值有什么区别呢?如果方法接收者为对象的指针,则会修改原对象,如果方法接收者为对象的值,那么在方法中被操作的是原对象的副本,不会影响原对象。...n", p) return 0 } func main() { var i Integer = 2 i.double() //receiver 为对象的指针...,对象的值和指针均可以调用该方法。...即对象的值既可以调用 receiver 是值的方法,也可以调用 receiver 是指针的方法。...对象的指针也是如此; (2)当方法的接收者是值时,即使是指针调用,那么方法内部也是对原对象的副本进行操作,不会影响原对象; (3)当方法的接收者是指针时,即使用值调用,那么方法内部也是通过指针对原对象进行操作

    4.6K20
    领券