指针自增的运算方式为 +1*指针类型的大小 这样子算对么,但是每个指针类型大小在32位下不都是4么?

指针自增的运算方式为
+1*指针类型的大小
这样子算对么,但是每个指针类型大小在32位下不都是4么?

指针是带类型的,自加的时候会加上他所指向类型的长度,比如说 int * p,p指向整型变量a,地址为2000,p+1指向的地址就是2004

  • 请看👉 :最少的操作次数,构造等差数列,每次可以对一个数进行+1或者-1操作
  • 除此之外, 这篇博客: 【搞定算法】归并排序及其解决逆序对数、小和问题中的 1、归并排序的代码实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • public class MergeSort {
    
        public static void mergeProcess(int[] arr){
            if(arr == null || arr.length < 1){
                return;
            }
            mergeProcess(arr, 0, arr.length - 1);
        }
    
        public static void mergeProcess(int[] arr, int left, int right){
            if(left > right){
                return;
            }
            int mid = left + ((right -left) >> 1);
            mergeProcess(arr, left, mid);
            mergeProcess(arr, mid + 1, right);
            if(arr[mid] > arr[mid + 1]){
                merge(arr, left, mid, right);
            }
        }
    
        public static void merge(int[] arr, int left, int mid, int right){
            int[] help = new int[right - left + 1];
            int k = 0;
            int p1 = left, p2 = mid + 1;
            while(p1 <= mid && p2 <= right){
                // 左右两边相等,就先拷贝左边的(可以保证稳定性)
                help[k++] = arr[p1] <= arr[p2] ? arr[p1] : arr[p2];
            }
            while(p1 <= mid){
                help[k++] = arr[p1++];
            }
            while(p2 <= right){
                help[k++] = arr[p2++];
            }
            // 拷贝回原数组
            for(int i = 0; i < k; i++){
                arr[i + left] = help[i];
            }
        }
    }

    注意几点:

    1、mergeProcess(arr, L, mid),不是mid-1;

    2、注意上面的代码中if(arr[mid] > arr[mid+1])防止一开始数组很有序的情况;

    3、注意在外排比较的时候,为了保证稳定性,左右相等的时候,先拷贝左边的。

指针加一是指加一个它指向数据类型大小