C语言面试题 - 指针访问类

简介: C语言面试题 - 指针访问类

C/C++知识点

指针访问类

题目 1

题目:下面程序的运行结果是:

int main(){
    int a[5] = {1, 2, 3, 4, 5};
    int *ptr = (int *)(&a+1);
    printf("%d %d\n", *(a+1), *(ptr-1));
}

答案:


对于数组名取地址和正常的常量取地址不同,&a 在这里的意思是 5 个 5 个的取数值,所以 &a+1 实际上是从第一个值开始取了 5 ,所以指向的是数值 5 的下一个位置即第六个位置。但是 ptr 本身被定义为 1 个 1 个的取地址。


故 *(a+1) 的结果是 2 ,*(ptr-1) 的结果是 5 。



题目 2

题目:请问下列代码有什么问题?

int main(){
    char a;
    char *str = &a;
    strcpy(str, "hello");
    printf(str);
    return 0;
}



答案: 这是一个典型的越界问题, str 指针只定义了 1 个字节,所以在拷贝 hello 时会出现越界问题。但是不同情况下报错的位置可能不同,有可能在进行 strcpy 的时候系统就已经报错了,因为访问到了不该访问的位置。


但是有可能 str 越界的位置后续用不到,所以 strcpy 就顺利执行了,然后打印出来,可最后返回时可能会报错,因为越界的位置可能修改了我要返回的地址处导致 main 函数无法正确返回。

题目 3

题目:下面程序的运行结果是:

char *s = "AAA";
printf("%s", s);
s[0] = 'B';
printf("%s", s);


答案:s 指向的是一个常量,所以当 s[0] 想要改变其中的值时就直接会报段错误,最后一句是无法执行到的。

题目 4

题目:下面的程序运行结果是:

int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
*(ptr++) += 123;
printf("%d %d\n", *ptr, *(++ptr));

答案: 这里输出的结果不会是 7 和 8 ,因为 c 语言会用栈来存储这些信息,从右往左将各个参数压入栈中。所以,*(++ptr) 会先被执行,导致结果变成了 8 和 8 。

目录
相关文章
|
Linux C语言 iOS开发
C语言结合AWTK开发HTTP接口访问界面
这样,我们就实现了在C语言中使用libcurl和AWTK来访问HTTP接口并在界面上显示结果。这只是一个基础的示例,你可以根据需要添加更多的功能和优化。例如,你可以添加错误处理机制、支持更多HTTP方法(如POST、PUT等)、优化用户界面等。
810 82
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
651 7
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
2260 13
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
1962 9
|
存储 C语言 开发者
C 语言指针与内存管理
C语言中的指针与内存管理是编程的核心概念。指针用于存储变量的内存地址,实现数据的间接访问和操作;内存管理涉及动态分配(如malloc、free函数)和释放内存,确保程序高效运行并避免内存泄漏。掌握这两者对于编写高质量的C语言程序至关重要。
739 11
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
698 7
|
存储 人工智能 Java
一文轻松拿捏C语言的指针的基础使用
本文介绍了C语言中的指针概念,包括直接访问和间接访问内存的方式、指针变量的定义与使用、取址运算符`&`和取值运算符`*`的应用,帮助读者深入理解指针这一C语言的核心概念。君志所向,一往无前!
491 0
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
593 6
|
存储 算法 程序员
C 语言指针详解 —— 内存操控的魔法棒
《C 语言指针详解》深入浅出地讲解了指针的概念、使用方法及其在内存操作中的重要作用,被誉为程序员手中的“内存操控魔法棒”。本书适合C语言初学者及希望深化理解指针机制的开发者阅读。
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。

热门文章

最新文章