喜闻乐见的const int *p、int* const p、const int* const p

不废话直接代码示例:

 1 void f(const int *p) {
 2
 3     int b = 10;
 4
 5     *p = 10; // error
 6
 7     p = &b; // fine
 8
 9 }
10
11 void f(int* const p) {
12
13     int b = 10;
14
15     *p = 10; // fine
16
17     p = &b; // error
18
19 }
20
21 void f(const int* const p) {
22
23     int b = 10;
24
25     *p = 10; // error
26
27     p = &b; // error
28
29 }

然而,如果function f使用了const作为承诺(不修改p或者不修改p指向的区域或者二者都有),function g与f有同样的interface但g没有使用const作任何承诺,如果f把p传递给了g,f是不会对g的行为做任何保证的(也就是说即便g对p或者p指向的区域做出了修改,编译器仍然不会报错,这是合理的,因为f只保证自己不会直接修改,不保证自己调用的其他function不作修改)

下面是个示例:

 1 #include <stdio.h>
 2
 3 void f();
 4 void g();
 5
 6
 7 int main() {
 8     int a = 0;
 9     int *p = &a;
10     f(p);
11     printf("a=%d\n", a);
12     return 0;
13 }
14
15 void f(const int *p) {
16     //*p = 10; // error
17     g(p);
18 }
19
20 void g(int *p) {
21     *p = 999;
22 }
时间: 2024-11-06 05:48:54

喜闻乐见的const int *p、int* const p、const int* const p的相关文章

void f(int(&amp;p)[3]){} 和void f(int(*p)[3]){}的区别

#include<iostream> using namespace std; void f(int(&p)[3]){ cout<<p[0]<<endl; cout<<p[2]<<endl; } int main(){ int a1[3]={1,2,3}; cout<<a1<<endl; cout<<&a1<<endl; f(a1); } 编译后输出: 0xbfbb8eb4 0xbf

解决warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type ‘int *’

[[email protected] c]# gcc MemTest.c -o MemTest1 -WallMemTest.c: In function 'main':MemTest.c:24: warning: format '%x' expects type 'unsigned int', but argument 2 has type 'int *'MemTest.c:39: warning: format '%x' expects type 'unsigned int', but arg

C++中int转string与string转int

#include "stdafx.h" #include "string" #include "iostream" #include "vector" #include "sstream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //string 转 int stringstream ss; string str; int i;

&quot;int?&quot; 是什么类型?和&quot;int&quot;有何区别

int?:表示可空类型,就是一种特殊的值类型,它的值可以为null用于给变量设初值得时候,给变量(int类型)赋值为null,而不是0int??:用于判断并赋值,先判断当前变量是否为null,如果是就可以赋役个新值,否则跳过public int? a=null:public int b(){return this.a ?? 0;} 值类型后面加问号表示可为空null(Nullable 结构) Nullable是.NET 2.0中新提供的一种用于标明一个值类型是否可以为空的技术. 对于一个类型,如

Mybatis异常--java.lang.IllegalArgumentException: NO ENUM const class org.apache.ibatis.type.JdbcType.int

今天下午写代码时发现一直报错,找了半天都没找到错误原因. 最后才发现原来是XML配置错误,但是Mybatis不识别int的. 上Mybatis官网翻了翻才发现原来Mybatis的JdbcType全是大写,而且没有INT,只有INTEGER 以后注意,不能再写串了(╯‵□′)╯︵┻━┻ 好像oracle也有一些类型和Mybatis上定义的不一样,下次出了问题记得去查一下Mybatis中是怎样定义的了 原文地址:https://www.cnblogs.com/wcxcc/p/10734860.htm

CTC安装机器错误解决办法:binding.cpp:92:49: error: cannot convert ‘THCudaTensor*’ to ‘const THFloatTensor*’ for argument ‘1’ to ‘int64_t THFloatTensor_size(const THFloatTensor*, int)’

CTC安装: 1. 在终端执行命令:git clone https://github.com/SeanNaren/warp-c) (效果如下图,大家不用管我前面括号的内容,那是我打开的虚拟环境) 2. 打开warp-ctc文件夹:cd warp-ctc 3.执行命令:git checkout ac045b6072b9bc3454fb9f9f17674f0d59373789 (这条命令要执行,不然会出现binding.cpp:6:29: fatal error: torch/extension.h

CTC安装及其错误解决办法:binding.cpp:92:49: error: cannot convert ‘THCudaTensor*’ to ‘const THFloatTensor*’ for argument ‘1’ to ‘int64_t THFloatTensor_size(const THFloatTensor*, int)’

CTC安装: 1. 在终端执行命令:git clone https://github.com/SeanNaren/warp-c) (效果如下图,大家不用管我前面括号的内容,那是我打开的虚拟环境) 2. 打开warp-ctc文件夹:cd warp-ctc 3.执行命令:git checkout ac045b6072b9bc3454fb9f9f17674f0d59373789 (这条命令要执行,不然会出现binding.cpp:6:29: fatal error: torch/extension.h

int a[5]={}, &amp;a+1与(int*)a+1的区别

#include <iostream> #include <typeinfo> using namespace std; int main() { int b, *pb; char *pb2; char *pb3; //&b = 0x001af74 pb = &b + 1; //0x001af78 int* pb2 = (char*)&b + sizeof(b); //0x001af78 char* pb3 = (char*)&b + 1; //0x

C#中(int)、Conver.Toint32()、int.Parse()三种类型转换方式的区别与联系--C#基础知识

自己也是刚学习C#程序设计语言,总结了一点知识点,想分享给大家.毕竟刚学习这门语言,学得不深,哪里如果有错误,请帮个忙指出一下哈,谢谢! 1.(int)可用于单精度.双精度等其他数值类型的转换(到整型int),不能用于转换string类型,例如: 这里用(int)转换string是不可以的,系统会报错,程序是不能运行. using System.Collections.Generic; using System.Linq; using System.Text; using System.Thre

详解Integer.toString(int i)方法和String.valueOf(int i)方法

通过查看String类的源码: public static String valueOf(int i) { return Integer.toString(i); } 我们可以看到,String.valueOf(int i)其实是调用了Integer.toString(int i)方法的. 再次通过查看Integer类的源码我们可以看到: public static String toString(int i) { if (i == Integer.MIN_VALUE) return "-214