编程训练营讲义 作者:巧若拙
指针专题讲义
专题一 指针基本概念
1.已知p和q都是指针变量,下列代码段不正确的是( A )
A int *p, q; B int a; int *p=&a, *q=NULL;
C int a, *p, *q; p=q=&a; D int a[10]; int *p = a;
2.已知代码段 int a = 4; int *p = &a; *p = 5; 则此时a的值为( C )
A 4 B 5 C 随机数
3.已知代码段 int A[10] = {1,2,3}; int *p = A; 则*p 和*(p+2)的值分别为( C )
A 0和2 B 1和2 C 1和3 D 1和随机数
4. 根据如下代码段,填写屏幕输出:
int a = 4, *p = &a;
cout << a << " " << &a << endl; //语句1
cout << *p << " " << p << endl; //语句2
*p = 9;
cout << a << " " << &a << endl; //语句3
已知语句1输出为:4 0x22ff18
则语句2输出为:4 0x22ff18 ; 语句3输出为:9 0x22ff18
5. 根据如下代码段,填写屏幕输出:
int a, *pa = &a;
double b, *pb = &b;
char c, *pc = &c;
int d[10], *pd = d;
cout << sizeof(a) << " " << sizeof(pa) << " " << sizeof(b) << " " << sizeof(pb)
<< " " << sizeof(c) << " " << sizeof(pc) << " " << sizeof(d) << " " << sizeof(pd);
屏幕输出为: 4 4 8 4 1 4 40 4 。
(可以看到无论何种类型的指针均占4个字节,因为指针变量对应的存储空间是用来存储变量的地址的,地址的编码是统一的,与变量类型无关)
.
6. 根据如下代码段,填写屏幕输出:
int A[8] = {1};
int *p = A;
for (int i=0; i<8; i++)
*(p+i) = i;
for (int i=0; i<8; i++)
cout << *(p++) << " ";
屏幕输出为: 0 1 2 3 4 5 6 7 。
7. 阅读代码,回答下列问题:
#include <iostream>
using namespace std;
const int M = 100;
void Swap(int *a, int *b);
void PrintArray(const int *A, int low, int high);
void InvertedArray(int *p, int *q);
int main()
{
int a = 4, b = 6;
int *p = &a, *q = &b;
Swap(p, q);
cout << a << " " << b << endl; //语句1
int A[M] = {1,2,3,4,5,6,7,8,9};
int n = 9;
p = A;
q = &A[n-1];
InvertedArray(p, q);
PrintArray(A, 0, n-1); //语句2
return 0;
}
问题1:程序执行完语句1和语句2后分别在屏幕输出哪些内容?
答案:语句1输出内容:6 4 语句2输出内容:9 8 7 6 5 4 3 2 1
void Swap(int *a, int *b) //交换元素的值
{
int t = a; a = b; b = t;
}
问题2:Swap()函数能实现预定的目标吗?该如何改写?
答案:
void Swap(int *a, int *b)
{
int t = *a; *a = *b; *b = t;
}
void PrintArray(const int *A, int low, int high) //输出数组A中区域[low,high]的元素
{
for (int i=low; i<=high; i++)
cout << *(A+i) << " "; //语句3
cout << endl;
}
问题3:输出数组A的元素,除了语句3的写法,还可以怎么写?
答案:语句3:cout << A[i] << " ";
void InvertedArray(int *p, int *q) //将数组进行逆序处理
{
while (p < q)
{
Swap( ); //语句4
}
}
问题4:将语句4补充完整?
答案:语句4:Swap(p++, q--);
指针专题讲义
最新推荐文章于 2021-09-22 23:34:49 发布