1. 程式人生 > >12、指標和陣列

12、指標和陣列

指標和陣列

[]不是陣列的專屬

注意:其實陣列就是指標,指標也是陣列

#include <stdio.h>

int main()
{
    int a = 10;
    int *p = &a;
    
    //通過指標間接操作a的記憶體
    *p = 111;
    
    printf("a = %d\n", a);
    printf("*p = %d\n", *p);
    
    //*p等價於*(p+0),同時等價於p[0]
    printf("p[0] = %d\n" p[0]);
    	
    //*p等價於p[0],操作的是指標所指向的記憶體
    p[
0] = 250; printf("a2 = %d\n", a); }

在這裡插入圖片描述 陣列名

#include <stdio.h>

int main()
{
    int a[10];
    //1、陣列名是陣列首元素地址
    printf("a = %p, &a[0] = %p\n", a, &a[0]);
    
    //2、陣列名是常量,不允許修改,int * const p
    //a = 10;//err
    
    return 0;
}

指向陣列首元素的指標

#include <stdio.h>


int main(int argc,
char *argv[]) { int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *p = NULL; //p指標變數指向首元素 p = &a[0]; p = a; int i = 0; for(i = 0; i < 10; i++) { //printf("%d, ", a[i]); printf("%d, ", *(a+i)); //printf("%d, ", *(p+i)); //p[i] 等價於 *(p+i), 操作都是指標所指向的記憶體 //printf("%d, ", p[i]);
} printf("\n"); return 0; }

指標的加減法

#include <stdio.h>

int main()
{
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    
    //定義一個指標,指向首元素
    int *p = a;
    p = &a[0];
    
    int n = sizeof(a)/sizeof(*a);
    int i = 0;
    
    for(i = 0; i < n; i++)
    {
        printf("%d, ", *p);
        p++;
    }
    printf("\n");
    
    //定義一個指標,指向尾元素
    int *q = &a[n-1];
    q = a+n-1;//同上面那個是等價的
    
    for(i = 0; i < n; i++)
    {
        printf("%d, ", *q);
        q--;
    }
    printf("\n");
    
    return 0;
}