c 指针兼容性问题

指针兼容性问题:   

  1. const指针不能赋值给非const指针.   
  2. 非const指针可以赋值给const 指针,但前提是只是一层间接运算   
 1   Example:
 2   int *pt1;
 3       const *pt2;
 4       const **pt3;
 5   
 6       pt2=pt1;//OK
 7       pt1=pt2;//NO
 8       pt3=&pt2;//OK
 9       pt3=&pt1;//NO double indirection
10   Problem:
11   pt1=pt2;//NO
12   pt3=&pt2;//OK
13   pt3=&pt1;//NO double indirection
14   
15   Explain:
16   const n=5;
17   Int *p1;
18   Const int **p2;
19   //consumption  p2=&p1; is right
20   p2=&p1;
21   *p2=&n;//OK ,but this mean p1=&n;
22   *p1=10;//OK because p1 is not const ,but that will be contradicted with consumption

指针兼容性问题:
  const指针不能赋值给非const指针.
  非const指针可以赋值给const 指针,但前提是只是一层间接运算
  Example:
  int *pt1;
      const *pt2;
      const **pt3;
  
      pt2=pt1;//OK
      pt1=pt2;//NO
      pt3=&pt2;//OK
      pt3=&pt1;//NO double indirection
  Problem:
  pt1=pt2;//NO
  pt3=&pt2;//OK
  pt3=&pt1;//NO double indirection
  
  Explain:
  const n=5;
  Int *p1;
  Const int **p2;
  //consumption  p2=&p1; is right
  p2=&p1;
  *p2=&n;//OK ,but this mean p1=&n;
  *p1=10;//OK because p1 is not const ,but that will be contradicted with consumption

时间: 2024-12-28 15:52:11

c 指针兼容性问题的相关文章

例看const与指针兼容性

在单层运算的前提下: 将常量或非常量数据的地址赋给指向常量的指针是合法的:普通类型和const类型指针 -> const类型指针 const int array1[4] = {0,1,2,3}; int array2[4] = {0,1,2,3}; const int *pr = array1; //合法 pr = array2; //合法 可只有非常量数据的地址才可以赋给普通的指针:普通类型指针只能 -> 普通类型指针 const int array1[4] = {0,1,2,3}; int

C Primer Plus(第5版)的笔记

2.2.2 第二遍 程序细节 2014-03-08 18:00:31 int指明了main()函数的返回类型.这意味着main()函数返回值的类型是整数.返回到哪里呢?返回给操作系统. 2.4 使程序可读的技巧 2014-03-08 17:46:11 选择有意义的变量名和使用注释.注意这两种技巧的互补性.如果变量名是width,就不需要用注释来说明该变量表示宽度,但是如果变量名是video_routine_4,那么就需要解释一下video routine 4的意义了. 注: 增加可读性 2.7.

C语言学习书籍推荐《C Primer Plus(中文版)(第5版)》下载

普拉塔 (Prata S.) (作者), 云巅工作室 (译者) <C Primer Plus(中文版)(第5版)>共17章,介绍了C语言的基础知识,包括数据类型.格式化输入输出.运算符.表达式.流程控制语句.函数.数组和指针.字符串操作.内存管理.位操作等,知识内容都针对C99标准:另外,<C Primer Plus(中文版)(第5版)>强化了对指针的讨论,并引入了动态内存分配的概念,也讨论了C预处理器和C库函数.高级数据表示(数据结构)方面的内容. 下载地址:点我 编辑推荐 作为

鼠标指针定位解析及兼容性方法

当事件发生时,获取鼠标指针的位置是很重要的事件.这原本是一个很简单的问题,但是由于浏览器的不兼容性,给开发带来了挑战.不同浏览器分别在各自事件对象中定义了不同的属性,详见下方图表. 属性 说明 兼容性 clientX 以浏览器窗口左上顶角为原点,定位X轴坐标 所有浏览器,不兼容Safari clientY 以浏览器窗口左上顶角为原点,定位Y轴坐标 所有浏览器,不兼容Safari offsetX 以当前事件的目标对象左上顶角为原点,定位X轴坐标 所有浏览器,不兼容Mozilla offsetY 以

8.30 指针基础概念

指针的兼容性 sizeof的结果是一样的就是兼容的. int *p; unsigned int ui = 10; p = &ui;  //正确 指针相加: 不是以整数的形式增加,而是移动 数组名与指针: 函数应该传数组名 : #include <stdio.h> void func(int *a) { a += 3; *a = 100; } int main() { int a[10] = {1,2,3,4,5,6,7,8,9,0}; int i; func(&a);//这里传

C++11中的指针空值nullptr

时间:2014.05.07 地点:基地 ----------------------------------------------------------------------------- 一.为什么要有指针空值nullptr 在良好的编码习惯中,声明一个指针并对其进行初始化非常重要,未初始化的悬挂指针常导致一些难以调试的错误.往常,我们常这样初始化指针变量: int* my_ptr1=0; int* my_ptr2=NULL; 但我们知道,NULL其实是一个宏定义,字面常量为0,即上述两

Qt之美(一):d指针/p指针详解(二进制兼容,不能改变它们的对象布局)

Translated  by  mznewfacer   2011.11.16 首先,看了Xizhi Zhu 的这篇Qt之美(一):D指针/私有实现,对于很多批评不美的同路人,暂且不去评论,只是想支持一下Xizhi Zhu,在引用一下Jerry Sun的话,“C++需要宏定义就像需要设计模式一样.也许你不知道,宏是图灵完全(turing complete)的,至少LISP下是这样,C/C++需要宏,几乎所有重要的C/C++库都需要和依赖宏.这些都超过咱们的想象,宏能带给我们所谓语法糖(Synta

C语言指针的初始化和赋值

1.指针的初始化 指针初始化时,"="的右操作数必须为内存中数据的地址,不能够是变量,也不能够直接用整型地址值(可是int*p=0;除外,该语句表示指针为空).此时,*p仅仅是表示定义的是个指针变量,并没有间接取值的意思. 比如: int a = 25; int *ptr = &a; int b[10]; int *point = b; int *p = &b[0]; 假设:int  *p; *p = 7; 则编译器(vs2008)会提示The variable 'p'

javascript中this指针探讨

javascript是一门类java语言有很多跟java相类似的特点,但也仅是类似而已,真正使用中还是有很大的差别.this指针常常让很多初学者抓狂,本人也曾为此困惑不解,查找过很多资料,今天在这里总结一下,希望能帮助后来者更快驯服这只拦路虎.网上有很多讲解this指针的文章其中不乏精品,以我看来了解this指针关键在于掌握javascript中函数的四种调用模式.那么什么是调用?调用指的是跟在任何产生一个函数值的表达式之后使用"()",obj.f()这种方式成为调用,obj.f这种方