1.int *p=&n;那么*p的值是n的地址;p的值是p;p的地址&p;n的值n==*p
2.有如下定义语句:int a=[][3]={ {1,2},{3,4,5},{6,7,8},{9}};那么a[1][3]的值是6。
因为a[1][3]中的a[1][]是{3,4,5},而数组下标从0开始,5的下标是2,则下标为3的应该是6,因为数组发生了越界。二维数组实质上是一个一维数组。在数组a[4][3]中,输出a[1][3]和a[2][0]的位置是一样的,即是同一个。
3.定义int**a[3][4];则变量占用的内存空间为48。
先看优先级,中括号优先级高,所以是是一个数组。**a[3][4]是指针数组,每个指针数组占4个字节,共有3*4==12个,所以占用内存空间12*4==48;*(*a)[3][4]是指针,四个字节。
4.在数组传输时,只有一次机会可以传递数组,(可采用字符串拷贝)
A:数组以'\0'结尾,要占一个位置,直接赋值字符串超出范围,四个格子放不下五个。
B:数组以'\0'结尾,要占一个位置,拷贝字符串“hell”已经有四个位置,没有地方存放‘\0'导致字符串拷贝不上,超出范围。
C:memcpy是拷贝空间,strlen是字符串长度,先拷贝对应的空间,在将字符串拷贝至数组,拷贝三个字符,(原来有四个\0);
D:一般最常见的拷贝方式
5.代码的执行结果(X86)