指针指向数组,对指针进行地址累加,累加完后指针无法使用了

指针指向数组,对指针进行地址累加,累加完后指针无法使用了

#include 

#define ARR_INDEX 27

int main() {

    int arr[ARR_INDEX] ;
    int* q = &arr[ARR_INDEX-1];
    //char* p = (char*)malloc(sizeof(char)*26);
    int* p = &arr;
    for (int i = 0; i < ARR_INDEX-1; i++) {
        arr[i] = 'A' + i;
        printf("%c", *p++);
        printf(" %d\n", p);
    }
    
    printf("%d", p);
    printf("\n%c\n", *p);
    printf("\n%c\n", *p);
    

    for (int i = 0; i < ARR_INDEX; i++) {
        printf("%c", arr[i]);
    }

}

img

16行加上p = arr; 将p重新指向数组首地址就行了

修改如下,供参考:

#include <stdio.h>
#define ARR_INDEX 26 //  #define ARR_INDEX 27 修改
int main() {
    int arr[ARR_INDEX];
    int* q = &arr[ARR_INDEX - 1];
    //char* p = (char*)malloc(sizeof(char)*26);
    int* p = arr;   //int* p = &arr;  修改
    for (int i = 0; i < ARR_INDEX; i++) {
        arr[i] = 'A' + i;
        printf("%c", *p++);
        printf("  %p\n", p - 1); //printf(" %d\n", p);修改
    }
    //printf("%d", p);
    //printf("\n%c\n", *p);
    //printf("\n%c\n", *p);
    for (q; q >= arr; q--) { //for (int i = 0; i < ARR_INDEX; i++)
        printf("%c %p\n", *q, q); //printf("%c", arr[i]);
    }
    return 0;
}