曾经进公司面试的C语言有关指针和数组的笔试题

简介:

原题如下:

#include <stdio.h>

int main(void)
{
	int i , j ; 
	unsigned int Array_A[32];
	unsigned int *pPointer;
	i = 0x0008 ;
	//测试i
	printf("i=%d\n",i) ;
	
	pPointer = Array_A ;
	*(pPointer++)=i++ ;
	//测试i 
	printf("i=%d\n",i) ;
	
	j= Array_A[0];
	printf("#j:%d\n",j);   //# 
	*(pPointer) = i ;
	j = Array_A[1];
	printf("##j:%d\n",j);   //## 

	return 0 ;	
}

这个题目问你#和##的结果分别是什么?

结果如下:


     为什么是这样?为什么#这个j不是9而是8?

    一说起这个问题,其实就是在考查数组的基本问题,我们看看这行代码:

pPointer = Array_A ;

    这行代码其实就是将数组名赋值给一个指针pPointer , 因为数组有空间,所以这里相当于给指针隐式的分配了空间,我们就不用去malloc申请内存了。

   其实数组名是一个常量左值,常量左值就意味着值是一个常量,且不能被修改,而Array_A[0]是数组首元素,它是左值,但可以修改。

   由此可知:数组首地址是数组本身的地址,而数组的第0个元素是第0个元素这个值的值的地址。

    那么*(pPointer++)= i++其实就是将i自加前的值写到了数组第0个元素的位置去了。我们都知道是后加,所以数组的第0个元素保存的是i++之前的值,也就是8 ,保存到了数组的第0个元素的位置。所以#j就等于8 ,##j是i++之后的值也就是9,保存到了数组的第1个元素的位置里去了。 

目录
相关文章
|
9天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
16 0
|
9天前
|
存储 C语言 C++
C语言 — 指针进阶篇(上)
C语言 — 指针进阶篇(上)
6 0
|
15天前
|
存储 程序员 C语言
C语言指针的概念、语法和实现
在C语言中,指针是其最重要的概念之一。 本文将介绍C语言指针的概念、语法和实现,以及如何使用它们来编写高效的代码。
13 0
|
16天前
|
存储 C语言
【C语言】深入解开指针(三)2
【C语言】深入解开指针(三)
|
16天前
|
存储 程序员 C语言
【C语言】深入解开指针(二)2
【C语言】深入解开指针(二)
【C语言】深入解开指针(二)2
|
16天前
|
存储 C语言
【C语言】深入解开指针(一)1
【C语言】深入解开指针(一)
|
16天前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现
|
16天前
|
存储 C语言
【C语言数组】创建、初始化、以及使用2
【C语言数组】创建、初始化、以及使用
|
17天前
|
C语言 索引
基于C语言的函数指针应用-消息命令处理框架
基于C语言的函数指针应用-消息命令处理框架
11 0
|
24天前
|
存储 人工智能 编译器
C语言指针详解
指针运算,指针和数组,二级指针
C语言指针详解

热门文章

最新文章