指针和引用(1)指针及其应用

简介: 注:读《程序员面试笔记》笔记总结1.知识点(1)指针是存放内存地址的变量。(2)指针定义的一般形式:1 int a=100;2 int *p=&a;//指针变量p的类型是:int *(3)取地址操作符:&(定义时的&仅表示该变量是引用,而不是取地址);解引用操作符*(定义指针时的*仅6代表该变量是指针,而非解引用);以上二者是相反的过程。

注:读《程序员面试笔记》笔记总结

1.知识点

(1)指针是存放内存地址的变量。

(2)指针定义的一般形式:

1 int a=100;
2 int *p=&a;//指针变量p的类型是:int *

(3)取地址操作符:&(定义时的&仅表示该变量是引用,而不是取地址);解引用操作符*(定义指针时的*仅6代表该变量是指针,而非解引用);以上二者是相反的过程。

(4)当需要在被调函数中直接修改主调函数中的变量是,可以将主调函数中变量的地址作为参数,并在被调函数中使用解引用直接修改指针指向的变量。

2.面试题

2.1被调函数中修改主调函数的变量

编写一个sort函数,将主函数中的变量重新赋值,赋值后a>=b>=c,并在主函数中补充函数调用语句

1 int main(int argc, char *argv[]) {
2     int a = 80, b = 60, c = 90;
3     /*    input a line to make a>=b>=c;*/
4     sort(&a, &b, &c);
5     cout << a << " " << b << " " << c << endl;
6     getchar();
7     return 0;
8 }

答案:

 1 void my_swap(int *a, int *b) {    //指针作为参数,用解引用来表示变量值
 2     int tem = *a;
 3     *a = *b;
 4     *b = tem;
 5 }
 6 
 7 void sort(int *pa, int *pb, int *pc) {    //指针作为参数,用解引用来表示变量值
 8     if (*pa < *pb)    my_swap(pa, pb);
 9     if (*pa < *pc)    my_swap(pa, pc);
10     if (*pb < *pc)    my_swap(pb, pc);
11 }

2.2区分指针和数组

知识点:(1)数组名等价于数组首元素的地址(例字符串的首元素);

(2)数组存储在栈上,不同数组之前无任何关系;

(3)字符串常量存储在字符串常量区,相同的字符串只有一份拷贝;

(4)当数组名作为参数时,相当于传递了数组的首元素的地址,而且只要实参是地址,那么形参一定是指针(见下面第二个代码段)。

答案解析见代码

 1 void equal(char str7[], char str8[]) {
 2     printf("%d\n", str7 == str8);
 3 }
 4 int main(int argc, char *argv[]) {
 5     char str1[15] = "hello,world";
 6     char str2[15] = "hello,world";
 7     char str3[] = "hello,world";
 8     char str4[] = "hello,world";
 9 
10     char *str5 = "hello,world";
11     char *str6 = "hello,world";
12         
13         //数组存储在栈上,str1和str3属于不同的数组变量,在内存中没有任何交集,故结果为0;
14     printf("%d\n", str1 == str2);
15         //虽然str3,str4没有显式声明数组的大小,其大小根据初值决定,此外其他分析同上,故其结果为0;
16     printf("%d\n", str3 == str4);
17         //字符串常量存储在字符串常量去中,内容相同的字符串常量只有一份拷贝,故str5,str6同时指向字符串常量的首字母,故str5==str6,结果为1;
18     printf("%d\n", str5 == str6);
19         //函数的结果取决于输入的参数值是否相等,由于str1!=str2,故结果为0,若参数是str5,str6,则其结果为1
20     equal(str1, str2);
21     getchar();
22     return 0;
23 }                    

以下代码段说明上面的知识点四

1 //以下四种函数声明方式等价,都表示形参是指针
2 void equal(char *str7,char *str8);
3 void equal(char str7[1],char str8[1]);
4 void equal(char *str7[15],char *str8[15])
5 void equal(char *str7[100],char *str8[100])

2.3简述指针和句柄的区别

答案:在概念上,句柄记录着资源对象列表中某个成员的索引,起作用类似于指向指针的指针,虽然句柄本质上是一个指针,但是指针可以随意指向一个对象,而句柄只能间接指向资源对象;在使用上,通过指针可以直接修改指针指向的内容,通过句柄只能调用一些Windows提供的API函数,这种对句柄的限制主要是出于安全考虑,防止用户随意修改系统资源,从而导致一场情况发生。

相关文章
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
2月前
|
自然语言处理 前端开发 JavaScript
深入理解前端中的 “this” 指针:从基础概念到复杂应用
本文全面解析前端开发中“this”指针的运用,从基本概念入手,逐步探讨其在不同场景下的表现与应用技巧,帮助开发者深入理解并灵活掌握“this”的使用。
|
2月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
2月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
7月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
98 1
|
4月前
|
传感器 物联网 大数据
C 指针在物联网的应用
在物联网(IoT)中,C 语言及其指针功能广泛应用于嵌入式系统。C 指针在内存管理、设备驱动、数据结构处理、传感器通信等方面发挥关键作用,如动态分配内存、直接访问硬件寄存器、传递复杂数据结构等,有效提升了资源受限环境下的性能和灵活性。通过函数指针和省电模式管理,还能实现事件驱动编程和节能目标,使 C 语言成为 IoT 开发的重要工具。
75 12
|
4月前
|
存储 安全 C语言
C语言 二级指针应用场景
本文介绍了二级指针在 C 语言中的应用,
|
5月前
|
算法 Java
双指针在数组遍历中的应用
文章深入探讨了双指针技术在数组遍历中的应用,通过实战例子详细解释了快慢指针和首尾指针的不同用法,并提供了解决LeetCode相关问题的Java代码实现。
|
5月前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
|
6月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
42 3

热门文章

最新文章