行指针和列指针

6 篇文章 0 订阅

1.C语言22_行指针和列指针_哔哩哔哩_bilibili

#include<iostream>
using namespace std;

int main() {

	int a[2][3] = { 1,2,3,4,5,6 };
	cout << *a[0] << endl;//1,相当于a[0][0]
	cout << *(a[1]+1) << endl;//5
	cout << **a << endl;//1
	cout << **(a+1) << endl;//4

	return 0;
}

 

  2.已知int a[4][3] = { 1,2,3,4,5,6,7,8,9,10,11,12 };int(*ptr)[3] = a,*p=a[0],则以下能正确表示数组元素a[1][2]的是_____

A.*((ptr + 1)[2])

B.*(*(p + 5))

C.(*ptr + 1) + 2

D.*(*(a + 1) + 2)

 【答案】D

 A.*((ptr + 1)[2])

ptr是个数组指针,指向的数据类型大小是3个字节,(ptr+1)[2] 相当于 ptr+3,指针+1,地址就加上数据类型的长度,这里是3,ptr+3就是地址+9.,即a[9]=10. a[2]就是a+2,a[2]是*(a+2)

B.*(*(p + 5))        //报错,*的操作数必须是指针 ,*(*(p+5))=*(*(p+5)+0)=a[5][0]不存在

C.(*ptr + 1) + 2 = *ptr+1+2= *ptr+3=&[*(*ptr + 3)]=*(*ptr + 3)的地址 

cout << *(*ptr + 3) << endl;//4=a[3]

D.*(*(a + 1) + 2)=a[1][2]    bingo

 可以调试代码理解一下:

#include<iostream>
using namespace std;

int main() {

	int a[4][3] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
	int(*ptr)[3] = a, *p = a[0];
	//cout << a[1][2] << endl;//6
	//选项A
	//cout << *((ptr + 1)[2]) << endl;//10
	//选项B
	//cout << *(*(p + 5)) << endl;//报错,*的操作数必须是指针
	//选项C
	//cout << (*ptr + 1) << endl;//a[0][1]=2的地址值  00F3FAF0
	//cout << *(*ptr + 1) << endl;//2
	//cout << *(*ptr + 1) + 2 << endl;//a[0][1]+2=2+2=4

	//cout << (*ptr + 1) + 2 << endl;//00F3FAF8
	cout << *(*ptr + 3) << endl;//4
	cout <<*ptr + 3 << endl;//=&*(*ptr + 3)=*(*ptr + 3)的地址
	cout << *ptr  << endl;//00F3FAF8
	//选项D
	//cout << *(*(a + 1) + 2) << endl;//a[1][2]=6

	return 0;
}

3.阅读程序,写出输出。

void fun(char *a, char *b) {
	a = b;
	(*a)++;
}
int main() {
	char c1 = 'A', c2 = 'a', *p1, *p2;
	p1 = &c1;
	p2 = &c2;
	fun(p1, p2);
	cout << c1 << '\t' << c2<< endl;//A       b
	return 0;
}

 【答案】A        b

【解析】a和b都指向c2,所以就没有指针指向c1,所以c1的值没变它的值没有变过,fun中*a=b。p1指向c1,所以main里面 *p1=A。

4.程序阅读,写出输出。

void gets(int *p1, int *p2, int *s) {
	int t;
	t = *p1 + *p2;
	s = &t;
	cout << *s << endl;
}

int main() {
	int a = 3, b = 5, *p1 = &a, *p2 = &b, *s = &a;
	gets(p1, p2, s);//8
	cout << *s << endl;//3 ,和函数体中的s无关,指向没变
	return 0;
}

【答案】83

 

 如有错误,敬请指正,谢谢!!!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Catherinemin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值