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++)就不为空。而里面有啥数据,又是未知的。