深入理解"指针"之面试题解析
来源:互联网 发布:彩虹秒赞网源码 编辑:程序博客网 时间:2024/06/05 03:21
该编文章是收集网络上有关指针题目并对其进行整理,其目的是加深对指针的理解,使自己对指针理解更加透彻。文章以讲解题目为主同时在原有题目基础上进行拓展。
一些理解不正确的地方,希望各位指正! 谢谢
文章为原创,转载请注明出处,谢谢 ;
作者 : 飞哥
1.请说明以下定义指针之间的区别:
char const * p1;
char * const p2;
char const * const p3;
const char * const p4;
1) p1 称之为: 常量指针,就是指向常量的指针,该指针的目标不可被修改,但是指针本身可以被修改。
例如:
int n = 100;
const int* p = &n; // int const* p;
*p = 200; // error !
int m = 1000;
p = &m;
(*p)++; // error !
2) p2 称之为 : 指针常量就是指针类型的常量,该指针本身不能被修改,但是指针的目标可以被修改。
例如:
int n = 100;
int* const p = &n;
*p = 200; // ok !
int m = 1000;
p = &m; // error !
3)p3和p4指针是意义是相同的,称之为: 常量指针常量,指针本身和它的目标都是常量,都不可被修改。
这两个指针比较好理解,我再次不再赘述;
例如:
int n = 100, m = 1000;
const int* const p = &n;
*p = 200; // error !
p = &m; // error !
结论: 1.常量指针,是常量不可以被修改,或者说指向不改变;
2.指针常量,是指针本身不能被修改;或者说指向可以改变;
为避免混淆,您可以这样理解:
口头提问时 : 常量指针和指针常量区别: "指针"开头表示指针本身不能被修改,"常量"开头表示指向的内容不能被修改;
自己理解时 : " * " 后有const表示指针不能被改变; “ * ” 前有const表示指针指向的目标不能被改变;
2.指针和引用区别
3.请说明下面输出结果
char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << ( str7 == str8 ) << endl;
结果是:0 0 1 1
str1,str2,str3,str4是数组变量,它们有各自的内存空间;
而str5,str6,str7,str8是指针,它们指向相同的常量区域。
4.下面输出数组大小的函数有没有问题?
int Strlen(char str[]){ return (int)(sizeof(str)-1);}有问题,函数 strlen(char str[])与strlen(char* pStr)写法的含义相同,在形参与实参结合过程中,
5.说说下面两者的区别:
char a[] =“abcdefg”;
那么,p[i]与a[i]的区别?
p[i]是先获取符号表p地址的内容,然后在该内容上+i地址处获取内容,即为间接引用。这里的“间接”指的是要被操作的地址不能直接从编译器符号表 中直接获得,而是从指针对象中获得。
int *ptr=(int *)(&a+1);
printf("%d,%d/n",*(a+1),*(ptr-1));
输出结果是什么?
void get_memory(char *p){p = (char *)malloc(sizeof(char) * 100);}void test(void){char *str = NULL;get_memory(str);strcpy(str, "hello world");printf("%s\n", str);}
答案: 段错误
- 深入理解"指针"之面试题解析
- 指针面试题解析
- 数组与指针典型面试题分析--深入理解指针含义
- 从一道面试题理解双重指针
- IOS面试题之--C面试题指针
- C++面试题笔记之野指针
- c++面试题之数组与指针
- 深入理解指针之必看
- 深入理解c指针之概述
- 面试题之 c语言 union 理解
- 面试题之java的理解
- HashMap实现原理分析--通过面试题深入理解
- 通过一道试题深入理解指针及数组内存布局
- 一些面试题:关于指针的一些理解
- 数据库面试题 Java 程序员 SQL 深入解析(一)
- 面试题解析之代码的健壮性
- 面试题之指针函数与函数指针的区别
- 面试题之数组指针和指针数组的区别
- poj 1003 Hangover
- LeetCode - Edit Distance 题解
- 基础知识super&异常
- 轻松学习Asp.net中的控件
- iOS—UIWindow的详情
- 深入理解"指针"之面试题解析
- 单链表的就地逆置
- Android_基础知识_01_异步任务AsyncTask
- pull解析技术
- 内存泄漏检测工具
- 耦合与内聚
- 从头开始学java--抽象类&接口
- poj 2406 Power Strings
- Android自定义控件——开源组件SlidingMenu的项目集成