21年4月23问题集(一)

1(解决)

数组名的sizeof   与  作为参数传入某函数后的sizeof

作为参数传递后,形参指向数组的什么?   数组名的地址,数组首元素的地址?

 

在函数里面定义的数组, sizeof表示整个数组的大小。

(这个内存块的大小)(元素个数 * 元素该类型的大小)

 

作为形参传递进去的时候,退化成了指针。Sizeof就是该元素的大小

(根据该元素的类型)

这个指针,指向数组首元素的地址

 

 

2(解决)

定义   ar[];

ar   &ar

如何判断数组在使用的时候,表示的是  数组首元素地址

数组名地址

 

 

 

 

 

ar,数组名作为数组首元素的地址,它是常性值

常性值是不能改变自身的,所以ar++  ar=ar+1 是错误

但是在其基础上进行运算,从而得出结果,是可行的。  

比如 printf(“%d”,ar+i);  这句是正确的(因为没有改变ar本身的值)

 

 

 

ar+1   &ar+1  之所以有结果,是因为没有改变ar本身的值

ar+1    表示的是数组首元素的地址加一,加到了第二个元素的地址

&ar+1   表示已以整个数组为单位进行加一,加到了ar[6]的那个地址位置

ar     数组首元素的地址

&ar  数组名的地址

 

 

 

 

 

 

3(解决)

 

输出为什么不是5 

Int br[5]  这个不是在函数内定义的,而是作为一个形参定义的

在形参里面都退化成了指针。所以5没有意义,啥也不表示。

 

上面两个都退化成了下面那个

 

 

4(解决)

如何用指针输出数组的时候,判断指针停止移动

判断条件用指针       p!=null    p!=nullptr   *p!=0   等

字符串数组可以用‘\0’!=*p  判断循环结束

Int数组呢?

 

 

字符串是特例,因为‘\0’结尾,所以可以指针自身判断。

其他的都不行

比如Int数组,nullptr!=p行不通。开辟的栈内存里,下面肯定还有地址,这样指针(p++)就不为空。而里面有啥数据,又是未知的。

 

posted @ 2021-04-23 12:37  没壳的蜗牛  阅读(39)  评论(0编辑  收藏  举报