指针专题讲义

编程训练营讲义  作者:巧若拙

指针专题讲义

专题一 指针基本概念

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--);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值