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));

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

目录
相关文章
|
22天前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
31 3
|
2月前
|
网络协议 编译器 Linux
【C语言】结构体内存对齐:热门面试话题
【C语言】结构体内存对齐:热门面试话题
|
3月前
|
存储 编译器 C语言
C语言存储类详解
在 C 语言中,存储类定义了变量的生命周期、作用域和可见性。主要包括:`auto`(默认存储类,块级作用域),`register`(建议存储在寄存器中,作用域同 `auto`,不可取地址),`static`(生命周期贯穿整个程序,局部静态变量在函数间保持值,全局静态变量限于本文件),`extern`(声明变量在其他文件中定义,允许跨文件访问)。此外,`typedef` 用于定义新数据类型名称,提升代码可读性。 示例代码展示了不同存储类变量的使用方式,通过两次调用 `function()` 函数,观察静态变量 `b` 的变化。合理选择存储类可以优化程序性能和内存使用。
160 82
|
17天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
44 4
|
21天前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
31 2
|
2月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
30 2
|
2月前
|
编译器 C语言
经典左旋,指针面试题
文章介绍了两种C语言实现字符串左旋的方法,以及如何使用C语言对整数数组进行奇偶数排序。通过实例演示了如何使用函数reverse_part和leftRound,以及在swap_arr中实现数组元素的重新排列。
28 0
|
2月前
|
Serverless 编译器 C语言
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
|
4月前
|
Java
【Java基础面试三】、说一说你对Java访问权限的了解
这篇文章介绍了Java中的四种访问权限:private、default(无修饰符时的访问权限)、protected和public,以及它们分别在修饰成员变量/方法和类时的不同访问级别和规则。
【Java基础面试三】、说一说你对Java访问权限的了解
|
3月前
|
存储 缓存 程序员
c语言的存储类型-存储类
本文详细介绍了C语言中的存储类型及其分类,包括基本类型(如整型、浮点型)和复合类型(如数组、结构体)。重点讲解了不同存储类别(`auto`、`static`、`register`、`extern`、`typedef`、`volatile`、`const`)的特点及应用场景,并展示了C11/C99引入的新关键字(如`_Alignas`、`_Atomic`等)。通过示例代码解释了每个存储类别的具体用法,帮助读者更好地理解和运用这些概念。
下一篇
无影云桌面