指针相关博客
第一题
1. 下面程序段()
char *str[] = {"ABC", "DEF", "GHI"}; puts(str[1]);
A:ABC
B:GHI
C:D
D:DEF
答案及解析 D
本题考查的是指针数组, 打响指针的第一枪:指针家族-CSDN博客
str[1]是字符串“DEF”的首元素地址,打印字符串就是放首元素地址,然后puts会找\0,遇到\0停止打印;
第二题
2. 32位系统,函数 void Func(char str[100]){} 中 sizeof(str) 的大小为()
A:4
B:5
C:6
D:7
答案及解析 A
记住一点,数组传参的时候,形参会降成指针。所以str就是一个char*类型的指针,32位系统就是4字节。
第三题
3. 下面代码在64为系统下的输出为()
void print_array(int arr[]) { int n = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < n; i++) printf("%d ", arr[i]); } int main() { int arr[] = {1, 2, 3, 4, 5}; print_array(arr); return 0; }
A:1
B:1 2
C:1 2 3 4 5
D:Run time error
答案及解析 B
这个题其实就是上面的题复杂一点,一定要记着数组传参的时候会被降为指针哦~
64位系统,指针大小为8字节,所以n = 2;那输出的就是前两个元素1,2;
第四题
4. 运行以下C语言代码,输出的结果是()
#include <stdio.h> int main() { char *str[3] ={"stra", "strb", "strc"}; char *p =str[0]; int i = 0; while(i < 3) { printf("%s ",p++); i++; } return 0; }
A:stra strb strc
B:s t r
C:stra tra ra
D:s s s
答案及解析 C
真的十分建议大家去看看指针的两个博客,对做指针的题很有帮助哦!
做指针的题必须要画图!首先p = str[0],str数组是一个指针数组,所以str[0]是字符串“stra”的首元素地址,那p++,就要看p的类型,p是char*类型,那就往后移动一个字节,所以就到t位置,之后到r位置。依次打印出来就是stra,tra,ra;
第五题
5. 在gcc编译器中,下面程序的运行结果是()
#include<stdio.h> int main(void) { int x[5] = {2,4,6,8,10},*p; int (*pp)[5]; p=x; pp=&x; printf ("%d\n",*(p++)); printf ("%d\n",*pp); }
A:4 4
B:2 4
C:2 随机值
D:4 6
答案及解析 C
这个题很不错,我相信大家第一个输出语句为2肯定没问题,直接看第二个输出语句
*pp,先看pp是什么,pp是一个数组指针,存的是整个数组的地址,后面赋值pp = &x,那 *pp = *&x = x,x是首元素的地址。所以第二个语句打印的应该是这个数组的首元素的地址;但是大家要记住一点,我们每次程序执行的时候,开辟的空间都不是固定的,所以这个数组的地址就是不固定的,那首元素的地址就是随机值。