数组指针小结

    技术2022-07-11  101

    #include<stdlib.h> #include<stdio.h> #include<string.h> void main() { int i = 0; int a; int *p = NULL; //arr代表数组首元素的地址(不是整个数组的地址,虽然二者值一样),arr是个指针常量 //变量---》指针变量-----》常量指针变量(常量指针) //不能被随便的改变指针变量的值(不能随便的改变指针的指向)相当于int func(int * const arr) //为啥arr是个const? //答:在定义arr[5]时,编译器分配内存,为了让编译器防止在释放内存时找不到所释放数组地址,编译器就把arr定义为const量。 //不能深入理解c指针是产生bug的根源。 int arr[5] = { 1,3,65,6,7 }; //arr=0x11 ;编译不了,无法改变指针变量的值。 typedef int(MYArr5)[5]; //给数组指针赋值需要。。。。。&arr MYArr5 *pArray=&arr; for (i = 0; i < 5; i++) { //arr[i] = i; //(*pArray)[i] = i; // printf("%d \n", arr[i]); printf("%d \n", (*pArray)[i]); } //相当于定义了一个数组指针 //多用如下定义数组指针: int c[5] = { 1,3,65,6,7 }; int(*myp)[5] = &c; //定义一个指向数组的指针变量。 for (i = 0; i < 5; i++) { printf("%d \n", (*myp)[i]); //注意数组指针中对数组中元素调用的语法:(*myp)[i]。 } system("pause"); }

    此处有个易混点: char *p[i]:是指针数组,即元素为地址的数组,p是指针变量,p[i]为各元素的值,亦即地址值。一般用于做关键字菜单,或main函数的命令行参数。 char (*myp)[i]:是数组指针,即(指向类型为数组的内存块的)指针,myp是指针变量,myp的值为数组的首地址,(*myp)[i] 取此数组首地址的内存块的第i个元素。 char (*myp)[i] 可以从运算符优先级角度理解,可以看做先有(*myp),后有[30],所以可以认为是先有指针myp,然后i表示myp+1的步长是i个char的大小。

    Processed: 0.009, SQL: 9