《c语言常见笔试题及答案(21).docx》由会员分享,可在线阅读,更多相关《c语言常见笔试题及答案(21).docx(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 c语言常见笔试题及答案(21) c语言常见笔试题及答案 一个32位的机器,该机器的指针是多少位 指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。 main() int a5=1,2,3,4,5; int *ptr=(int *)(a+1); printf(%d,%d,*(a+1),*(ptr-1); 输出:2,5 *(a+1)就是a1,*(ptr-1)就是a4,执行结果是2,5 a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) int *ptr=(int *)(a+1); 则ptr实际
2、是(a5),也就是a+5 缘由如下: a是数组指针,其类型为 int (*)5; 而指针加1要依据指针类型加上肯定的值, 不同类型的指针+1之后增加的大小不同 a是长度为5的int数组指针,所以要加 5*sizeof(int) 所以ptr实际是a5 但是prt与(a+1)类型是不一样的(这点很重要) 所以prt-1只会减去sizeof(int*) a,a的地址是一样的,但意思不一样,a是数组首地址,也就是a0的地址,a是对象(数组)首地址,a+1是数组下一元素的地址,即a1,a+1是下一个对象的地址,即a5. 1.请问以下代码有什么问题: int main() char a; char *str=a; strcpy(str,hello); printf(str); return 0; 没有为str安排内存空间,将会发生特别 问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但由于越界进展内在读写而导致程序崩溃。 char* s=AAA;