1. 下面程序段()
char *str[] = {"ABC", "DEF", "GHI"};
puts(str[1]);
A:ABC
B:GHI
C:D
D:DEF
本题考查的是指针数组,?打响指针的第一枪:指针家族-CSDN博客
str[1]是字符串“DEF”的首元素地址,打印字符串就是放首元素地址,然后puts会找\0,遇到\0停止打印;
2. 32位系统,函数 void Func(char str[100]){} 中 sizeof(str) 的大小为()
A:4
B:5
C:6
D:7
????????记住一点,数组传参的时候,形参会降成指针。所以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
????????这个题其实就是上面的题复杂一点,一定要记着数组传参的时候会被降为指针哦~
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
真的十分建议大家去看看指针的两个博客,对做指针的题很有帮助哦!
做指针的题必须要画图!首先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
这个题很不错,我相信大家第一个输出语句为2肯定没问题,直接看第二个输出语句
????????*pp,先看pp是什么,pp是一个数组指针,存的是整个数组的地址,后面赋值pp = &x,那 *pp = *&x = x,x是首元素的地址。所以第二个语句打印的应该是这个数组的首元素的地址;但是大家要记住一点,我们每次程序执行的时候,开辟的空间都不是固定的,所以这个数组的地址就是不固定的,那首元素的地址就是随机值。