【练习1】关于数组和指针(20230220-23)

题目1在这里插入图片描述
题目2在这里插入图片描述
题目3
在这里插入图片描述
题目4
在这里插入图片描述
题目5
在这里插入图片描述

链接:https://www.nowcoder.com/questionTerminal/68d3ccd842304a3181a3cc84894125bd
一、push方法是向数组末尾添加一个或者多个元素,并返回新的长度 
二、pop方法删除数组的最后一个元素,把数组的长度减1,并且返回它被删除元素的值,如果数组变为空,则该方法不改变数组,返回undefine值 
三、unshift()方法是向数组的开头添加一个或多个元素,并且返回新的长度 
四、shift()方法和unshift()方法恰恰相反。该方法用于把数组的第一个元素从其中删除,并返回被删除的值。如果数组是空的,shift()方法将不进行任何操作,返回undefined的值。 
五、join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。

题目6
在这里插入图片描述

链接:https://www.nowcoder.com/questionTerminal/ea36a36df5ba451481f776f191a5d44d
指针数组( * stings[] ):可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。
数组指针( (*strings)[] ):可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。

题目7在这里插入图片描述

链接:https://www.nowcoder.com/questionTerminal/242d747044bd417e95fe37d69884dff8
首先题目说要声明一个数组指针,  一般我们想到的数组指针是 随便来一个 int(*p)[10],    
然后又说每个元素是一个函数指针,那么我们随便来一个 函数指针  int (*pf)(int *) . 
然后把(*p)[10]作为一个整体替代 pf     即   int(*(*p)[10]))(int *);    
分析: 判断一个复杂式子看最高优先级的,*p是一个指针,然后(*p)外面是[],所以是数组指针,(*p)[10])描述完毕,然后再看外面int(*)(int *)很明显,这是一个函数指针,所以这个数组中每个元素是函数指针

题目8
在这里插入图片描述

链接:https://www.nowcoder.com/questionTerminal/c6521c983382471da1f04c0a23f227f5
添加和删除元素都是加法,删除元素front加,增加元素rear加
1、队列添加元素是在对尾,删除元素是在对头;
2、添加元素,尾指针rear+1;删除元素,头指针front+1;
3、本题中,删除一个元素,front+1,也就是3+1=4;添加2个元素,rear+2,也就是0+2=24、选 B’

题目9
在这里插入图片描述
题目10
在这里插入图片描述

链接:https://www.nowcoder.com/questionTerminal/274dc430586c4a5e932f89f0c1c64515
A中线性表的顺序存储结构中逻辑顺序与物理顺序总是一致的,但链式存储结构却不是,
B:两种存储结构没有优劣之分,只是看在什么情况下适合哪种存储结构。对于经常插入或删除的适合选择链式存储,经常查找的适合顺序存储。
CD正确
E中数据结构的基本运算中,搜索肯定不是必须的,比如栈中就没有搜索

9.1指针–9.1-1取地址运算,运算符取得变量的地址(SHD)

在这里插入图片描述
在这里插入图片描述

%x 使用十六进制数字0f的无符号十六进制整数

9.1指针–9.1-2指针变量就是记录地址的变量

在这里插入图片描述

*p当作一个整数

左值之所以叫左值
是因为出现在赋值号左边的不是变量,而是值,是表达式计算的结果:
. a[0] = 2;
. *p = 3;
·是特殊的值,所以叫做左值

9.1-3指针的使用,指针有什么用

**指针应用场景一
·交换两个变量的值

**指针应用场景二
a·函数返回多个值,某些值就只能通过指针返回。
·传入的参数实际上是需要保存带回的结果的变量

b·函数返回运算的状态,结果通过指针返回
·常用的套路是让函数返回特殊的不属于有效范围内的值来表示出错:
·-1或0(在文件操作会看到大量的例子)
·但是当任何数值都是有效的可能结果时,就得分开返回了

注意:任何一个地址变量没有被赋值之前。没有得到任何实际的变量地址之前。
不能通过它用*访问任何的变量,访问任何的数据。

9.1-4指针与数组,为什么数组传进函数后的sizeof不对了(SHD)

在这里插入图片描述
在这里插入图片描述

数组变量是特殊的指针
1·数组变量本身表达地址,所以
. int a[10]; int*p=a;//无需用&取地址
·但是数组的单元表达的是变量,需要用&取地址
·a == &a[0]
2·[]运算符可以对数组做,也可以对指针做:
·p[0]<==> a[0]
3·*运算符可以对指针做,也可以对数组做:
·*a = 25;
4·数组变量是const的指针,所以不能被赋值.
int a[] <==> int * const a=....

9.1-5指针与const,指针本身和所指的变量都可能const(SHD)

1.指针是const
表示一旦得到了某个变量的地址,不能再指向其他变量
int *const q= &i;//q是const
*q= 26;// OK
q++;// ERROR
2.所指是const
表示不能通过这个指针去修改那个变量(并不能使得那个变量成为const)
const int *p = &i;
*p = 26;//ERROR!(*p)是const
i = 26;//OK
p =&j;//OK

在这里插入图片描述

转换
·总是可以把一个非const的值转换成const的
void f(const int* ×);
int a = 15;
f(&a); //ok
const int b = a;
f(&b); // ok
b = a + 1;// Error !
·当要传递的参数的类型比地址大的时候,这是常用的手段:既能用比较少的字节数传递值给参数,又能避免函数对外面的变量的修改
const数组
const int a[]= {1,2,3,4,5,6,};
数组变量已经是const的指针了,这里的const表明数组的每个单元都是const int
所以必须通过初始化进行赋值
作用:保护数组值
·因为把数组传入函数时传递的是地址,所以那个函数内部可以修改数组的值
·为了保护数组不被函数破坏,可以设置参数为const. 
int sum(const int a[], int length);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值