曾经进公司面试的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个元素的位置里去了。
曾经进公司面试的C语言有关指针和数组的笔试题的更多相关文章
- C语言中指针和数组
C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...
- C语言之指针与数组总结
和指针相关的问题口诀1: 1. 地址变量得地址,得谁地址指向谁 和指针相关的问题要画图: 内容变量画房子,指针画箭头 ---->口 ------------------------------- ...
- C语言的指针和数组
指针和内存 指针变量也是个变量,不过保存的是另一个变量的地址.另外编译器还会记住指针所指向变量的类型,从而在指针运算时根据变量类型采取不同操作. 例如,char * a 定义了char 类型的指针变量 ...
- C语言中 指针和数组
C语言的数组表示一段连续的内存空间,用来存储多个特定类型的对象.与之相反,指针用来存储单个内存地址.数组和指针不是同一种结构因此不可以互相转换.而数组变量指向了数组的第一个元素的内存地址. 一个数组变 ...
- C语言使用指针表示数组的注意事项
1)数组名是指针常量 如对指针变量可以进行++运算,但是对数组名却不允许,另外,对数组名的赋值运算也是错误的 2)注意指针变量的当前值 指针变量的值在程序运行过程中可能经常改变,要对此注意 3)数组越 ...
- Android JNI编程(四)——C语言多级指针、数组取值、从控制台输入数组
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:前面我们介绍了一级指针的相关概念和用发,今天我们就来说一说多级指针. 1 ...
- c语言,指针与数组--指针与二维数组2
指向一维数组的指针 char (*p)[10] ;指向一维数组的指针类型 typedef char(*TYPE_P2ARRAY)[10] ; 该指针可以指向数组 ,且使用起来效果节本相同, ...
- C语言-指针、数组、结构体、分支、循环混合使用
1.写一个程序,输出如下内容: //############################################################# //### name number ma ...
- C语言中指针和数组的区别
看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h> int m ...
随机推荐
- Android中GridView的一些特殊属性
GridView的一些特殊属性: 1.android:numColumns="auto_fit" //GridView的列数设置为自动 2.android:columnWidt ...
- 使用OpenCV读、操作、写图像并与bash合作对某个目录下所有图像进行类似处理
我门要对某个目录下所有图像文件进行统一处理,如果图像的数量过多,那么手动地一张张处理就会显得有些麻烦.本文使用OpenCV和bash来完成我们指定的任务. 任务 将目录A下的所有统一格式的jpg图像变 ...
- Swift中不用桥接文件和.h头文件直接和C代码交互的方法
我们知道一般情况下Swit要想调用obj-c,c或c++代码必须通过obj-c以及桥接文件才可以办到,但是对于某些简单的代码,我们可以跳过桥接文件和.h头文件,直接和C代码交互呢! 我们再Projec ...
- iOS9中如何注册远程通知
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在以往的版本中,我们可以通过: [[UIApplication ...
- 插件开发之360 DroidPlugin源码分析(五)Service预注册占坑
请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52264977 在了解系统的activity,service,broa ...
- 仿qq最新侧滑菜单
为了后续对这个项目进行优化,比如透明度动画.背景图的位移动画,以及性能上的优化. 我把这个项目上传到github上面,请大家随时关注. github地址https://github.com/sungu ...
- UNIX环境高级编程——初始化一个守护进程
#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h&g ...
- Linux设备驱动编程---miscdevice杂类设备的使用方法
miscdev简称杂类设备杂类设备就是对字符设备驱动做一个封装,方便简单使用杂类设备封装字符设备需要包含的头文件:#include <linux/miscdevice.h>(1)杂类设备的 ...
- Java进阶(三十八)快速排序
Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...
- AndroidStudio如何快速制作.so
之前写过一篇Eclipse制作.so的文章,http://blog.csdn.net/baiyuliang2013/article/details/44306921使用的是GNUstep模拟Linux ...