当前位置:   article > 正文

关于指针的15个经典面试题_关于对象指针的典型提问

关于对象指针的典型提问

1. 常指针与常量的指针
        char * const p;
  char const * p
  const char *p
  上述三个有什么区别?

  char * const p;   //p为只读指针。
  char const * p;//p值只读的指针。
  const char *p; //和char const *p

---------------------------------------------------
2.定义与声明
声明是普通的声明:它所描述的并非自身,而是描述在其他地方创建的对象。
定义是特殊的声明:它为对象分配内存,即现场创建对象。

---------------------------------------------------
3.左值与右值
 I.左值:编译时可知。左值可以分为可修改左值和不可修改左值,数组名就是一个不可修改的左值。即不能给数组名赋值!(注意这里指的是“数组名”) 这是为什么呢?下面有一个现场:
char a[10] = {'a'};
char b[10] = {'b'};
a = b;
编译时出现的错误:
error: incompatible types when assigning to type ‘char[10]’ from type ‘char *’
结论:
当数组名为左值时,它的类型是字符数组;当数组名为右值时,它的数据类型是字符指针。

 II.右值:运行时可知。
---------------------------------------------------

4.指针与数组
 如果编译器需要一个地址来执行一种操作,对于被定义的数组变量而言的,它地址在编译时可知,所以它就可以直接进行操作;而对于被声明的指针而言,只有在程序运行的时候才知道它所指向的地址的值,然后才能在当前地址上操作。

 char array[] = “sdfsdf”;   …   c = a[i];
 数组的下标引用步骤:(1)取编译器符号中的符号array的地址(假设是8888)
         (2)array[i]即为取地址8888+i的内容。
 char *p; … c = *p;
 指针的间接引用步骤:(1)取编译器符号表中符号p的地址(假设是7777)
         (2)获取7777位置处的内容(假设是9999)
         (3)取9999处地址的内容,即为*p
 
 char *p = “abcdefg”;
 char a[] &

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/164685?site
推荐阅读
相关标签
  

闽ICP备14008679号