在做某个题时,我设置了这样一个函数: 它传入一个长度为 3 的数组{9,9,9}的地址,改成{8,8,8},设置一个 *p 指向数组头指针的前一位置,赋值p所在地址块 *p=1 ,并return p; 按常理来说,我在main函数中调用方法后,遍历4次打印应当打出{1,8,8,8},可是打出的却是{4,8,8,8}。 我查了半天,终于发现,问题在于main函数中有另一个变量
int main() {
int digits[3]={9,9,9};
int returnSize;
这个returnsize在初始分配时直接占了digits的前一个位置,那么我返回访问的第一个*p就是returnsize的值4。这可能和c语言变量分配规律有关,可是我在网上查不到,目前来看,要么我只在digits地址往高操作,要么我将returnSize强制分配到指定地址 : 比方说int returnSize=(int)0x28fec8 之类的,但是这样做很危险,而且考试写算法根本不能这么写 或者是整到指针型
int* returnSize=(int*)malloc(sizeof(int));
这种应该更好些,也符合常规逻辑,实际中应该这么写。 但是在写算法题的时候只能在一个新方法内部进行各种操作,主函数相当于不可见,它怎么规定变量完全不归我管,万一人家真像我最开始写的那样,那我用这种方法只能是自认倒霉。或者我把returnsize指针地址在新方法中改了,但是改地址又像上面所说,是很危险的行为。总之现在查不到这方面的东西,先记着,以后再慢慢找路子。
|