常量指针、指针常量、常量指针常量

 1 #include<stdio.h>
 2
 3 int main()
 4 {
 5     int a = 120;
 6     int b = 60;
 7
 8     /*
 9      * 常量指针, 不可以修改指向地址
10      * 的存储空间里的值,但可以修改指向地址的值
11      */
12     int const *p1 = &a;
13     const int *p2 = &a; //常量指针
14
15     /*
16      * 指针常量,不可以修改指向的地址
17      * 但可以修改所指向地址存储空间里的内容
18      */
19     int * const p3 = &b;
20
21     /*
22      * 常量指针常量, 所指向的地址及存储空间里的值
23      * 都不能修改
24      */
25     const int *  const p4 = &a;
26     int const * const p5 = &b;    //常量指针常量
27
28
29     p1 = &b; // 常量指针, 可以修改指向的地址
30     p2 = &b; // 常量指针, 可以修改指向的地址
31
32     *p3 = 10; // 指针常量, 可以修改存储空间里的内容
33   //p3 = &a; // 指针常量, 不可以修改指向的地址
34
35   //p4 = 10;//指针常量,不可以修改指向的地址但可以修改所指向地址存储空间里的内容
36  //p5 = &a;//指针常量,不可以修改指向的地址但可以修改所指向地址存储空间里的内容
37
38     printf("%d %d %d %d %d", *p1, *p2, *p3, *p4, *p5);
39
40     return 0;
41 }
时间: 2025-01-18 09:25:27

常量指针、指针常量、常量指针常量的相关文章

指针和字符串和字符串常量、用gdb来获取非法内存中的信息

例程1 #include<stdio.h> int main(void) { char *s="hello"; printf("%s\n", s); s[0]="H" //因为s指针指向的字符串"hello"是字符串常量,所以不能通过指针进行更改,所以这里会产生段错误 printf("%s\n", s); return 0; } 例程2 #include<stdio.h> #incl

c语言常量指针赋值给变量指针导致警告

常量指针定义:常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针.指针指向的对象是常量,那么这个对象不能被更改.常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值. 在C/C++中,常量指针是这样声明的: 1)const int *p; 2)int const *p; 例子: int

指针和引用与及指针常量和常量指针

指针和引用的区别 1.存在空指针,但是不存在空引用. 2.指针可以不初始化,而引用必须初始化,并且,引用的目标一旦确定,后面不能再更改,指针可以更改其指向的目标. 3.指针是一个实体,而引用仅是个别名. 4.引用是类型安全的,而指针不是 (引用比指针多了类型检查. 5.指针和引用的自增(++)运算意义不一样,对引用的操作直接反应到所指向的对象,而不是改变指向:而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容. 6.存在指针数组 ,不存在引用数组,不允许使用引用数组,因为引用没有内

常量指针(指针指向的数值是常量)指针常量(指针指向的地址是无法改变的)

常量与常量指针 #include <iostream> using namespace std; int main() { int a = 3; const int *p = &a; cout << *p << endl; // *p = 20; // cout << *p << endl;//变量的值是常量,不能通过修改指向的变量的值,都是可以将指针进行指向别的地址. a = 20; cout << *p <<

c++不允许指向常量的指针赋值给不指向常量的指针

#include <iostream> using namespace std; class A { public: int i; int j; } int main() { const A* a = new A(); A* a1; a1 = a; } 这个是有道理的,能够这么做的话,const中内容就会被改变.

C/C++笔试篇-------二维指针数组、数组指针的用法

1.废话不多说,先上代码: #include <iostream> using namespace std; int main(void) { int v[2][5] = {{1,2,3,4,5},{6,7,8,9,10}}; int (*a)[5] = v; //指针数组,指针指向数组 a[5],a[5]里面是int数值 该指针等于v的地址 cout<<(*a+1)<<endl; //*a是v[0][0]的地址. 0x22fe04 cout<<(*a+2)

深入理解C指针之一:初识指针

简单来说,指针包含的就是内存地址.理解指针关键在于理解C的内存管理模式.C里面有三种内存: ①.静态全局内存(生命周期从程序开始到程序结束,全局变量作用域是全局,静态变量作用域在定义它们的函数内部): ②.自动内存(在函数内部声明的变量,在函数被调用时创建,作用域和生命周期都在函数内部): ③.动态内存(内存分配在堆上,根据需要释放,通过指针引用,作用域局限于引用的指针): 下面先来生命一个指针并打印其地址和值,这里p%指的是以十六进制的形式返回数据: #include <stdio.h> m

指针数组,数组指针,指针函数,函数指针,二级指针详解

先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P: char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[]是一个数组,暂时把p[]看成是q,也就是char *(q),定义了一个指针q,只不过q是一个数组罢了,故定义了一个数组,数组里面的数据是char *的,所以数组里面的数据为指针类型.所以char *p[4]是四个指针,这四个指针组成了一个数组,称为指针数组,既有多个指针组成的数组. char(*p

学C第九天(指针运算、数组指针)

1.指针的加减运算 1)指针+整数 将向后移动sizeof(指针类型)*整数个内存单元 2)指针-整数 将向前移动sizeof(指针类型)*整数个内存单元 3)说明:编译器不会检查移动过后目的地址是否可用,如果移动失误,可能会修改本不应该修改的内存单元,因此,这种运算适宜在数组内进行,或者是动态申请的内存. 4)同类型指针相减 结果为:(指针1的值-指针2的值)/sizeof(指针类型) #include<stdio.h> void main() { int a = 10; int *p =

c语言指针,简单一句话指针就是地址

简单一句话,指针就是地址 0:网购的地址,通过这个地址找到你, 程序的地址,通过地址来操作变量,这个地址有一个叫法叫做指针,java 里面把地址就叫做引用 1:内存的单位是字节,例如一个256MB的机器,有256*1024*1024 字节的存储单位,每个字节都有一个对应的地址 通过该地址可以找到该块内存,就像我们的通讯地址一样 2:每一个变量由若干个字节组成,例如:int age = 20 由 4个字节组成,变量中第一个字节的地址称为变量的地址 #include <stdio.h> int m