1 在有数组作为参数的函数里,这个时候的参数已经不是数组,而是“指针”
总所周知,在C++中我们通过sizeof(arr)/sizeof(arr[0])
来获取数组arr的长度。但是当数组作为函数参数时,不能再使用sizeof(arr)来获取数组的总大小,或者使用sizeof(arr)/sizeof(arr[0])来获取数组的长度。如果要获取数组的长度,那么只能加一个长度参数m。
void testFun(int num[], int m){
int num_2[10];
// 这时获取的是数组大小
int length_2 = sizeof(num_2)/sizeof(num_2[0]);
// 这时获取的是指针大小
int length = sizeof(num)/sizeof(num[0]);
}
2 memset函数用来随意赋值,它是将数字以单个字节逐个拷贝的方式存放到指定的数组内存中
int main(){
int dp[100];
memset(dp, 0, sizeof(dp));
// 00000000 00000000 000000000 00000000
}
int类型的变量一般占用4个字节,对每一个字节赋值0的话就变成了“00000000 00000000 000000000 00000000” (即10进制数中的0)
赋值为-1的话,放的是 “11111111 11111111 11111111 11111111 ”(十进制的-1)。
如果设置赋值为1呢?这个时候就不是想当然的全部为1了,而是“00000001 00000001 00000001 00000001”。
int main(){
int dp[100];
memset(dp, 1, sizeof(dp));
// 00000001 00000001 00000001 00000001
}
我们在很多程序中都会看到memset(a,127,sizeof(a))
这样的代码,127是什么特别的数字呢?通过基础的进制转换可以得知127的二进制表示是01111111,那么在dp数组里放的内容就是01111111 01111111 01111111 01111111,(10进制的2139062143),这样就实现了将数组里的全部元素初始化为一个很大的数的目的了,在最短路径问题以及其他很多算法中都是需要用到的。值得注意的是,int类型的范围为2^31-1,大约是2147483647,所以初始化int类型的数组也可以使用127这个数值。
如果是128呢?因为128的二进制是10000000,那么放的内容就是10000000 10000000 10000000 10000000,经过计算可得这个数是-2139062144。这样就可以将数组初始化为一个很小的数了。