C语言~指针数组、数组指针、函数指针、函数指针数组详解

来源:互联网 发布:naive bayes算法 编辑:程序博客网 时间:2024/06/05 19:39

总结指针和数组部分的相关知识自己写的一遍博客:

指针是变量单元的地址,地址指向该变量单元,因此地址形象的称为“指针”,通过指针(地址)可以找到内存单元。

  (总结)1.指针是存放地址才出现的,地址是为了标示一块地址空间的;
                2.指针让地址有地方存放,指针让内存的访问更加方便;
                3.指针的大小在
32位平台是4个字节,在64位平台是8个字节。

#include <stdio.h>int main(){    int a = 10;         //在内存中开辟一块空间,初始化为10    int *p = &a;        //这里我们对变量a,取出它的地址,可以使用&操作符,地址类型为int*                        //将变量a的地址存放在p变量中,p就是一个指针变量,该指针变量指向a这块空间return 0;}


一级指针 :变量的指针

int main(){int a = 10;int *pa = &a;                   //整型指针pa保存变量a的地址printf("%d\n", *pa);            //解引用pa,通过指针pa找到该空间的值为10return 0;}

二级指针 :指针变量也是变量,是变量就有地址 ;所以变量地址的指针就是二级指针变量

int main(){int a = 10;int *pa = &a;                     //整型指针变量pa保存整型变量a的地址int **ppa = &pa;                 //ppa保存pa的地址printf("%d\n", **ppa);           //两次解引用,找到a的值为10return 0;}


一维数组 :

int main(){int arr[10] = { 0 };                 //arr数组保存十个元素,数组元素初始化为0int i = 0;for (i = 0; i < 10; i++){printf("%d\n", arr[i]);      //打印arr数组的十个元素}return 0;}

二维数组

int main(){int arr[3][3] = { 0 };                           //初始化三行三列元素,每个元素初始化为0int i = 0;int j = 0;for (i = 0; i < 3; i++){for (j = 0; j < 3; j++){printf("%d\n", arr[i]);          //打印九个元素,均为0}printf("\n");}return 0;}

指针和数组的运算 

int main(){int ch[5] = { 1, 2, 3, 4, 5 };      int *cp = &ch;&ch;                 //取出ch空间的地址cp;                  //cp保存ch空间的地址&cp;                 //取出的地址为二级指针*cp + 1;             //指向数组后面的内容,随机值   *(cp + 1);           //取出元素2}

指针数组 

     用于存储指针的数组,也就是数组元素都是指针

数组指针 

         指向数组的指针

int main(){int c[4] = { 1, 2, 3, 4 };int *a[4];          //指针数组int(*b)[4];        //数组指针b = &c;           //将数组c中元素赋给数组afor (int i = 0; i<4; i++){a[i] = &c[i];}printf("%d", *a[1]);    //输出2printf("%d",(*b)[2] );  //输出3return 0;}

函数指针 

/** 求最小值* 返回值是int类型,返回两个整数中较小的一个*/int min(int a, int b) {return a < b ? a : b;}int(*f)(int, int); // 声明函数指针,指向返回值类型为int,有两个参数类型都是int的函数  int _tmain(int argc, char* argv[]){f = max; // 函数指针f指向求最大值的函数max  int c = (*f)(1, 2);f = min;    // 函数指针f指向求最小值的函数min  c = (*f)(1, 2);printf("The min value is %d \n", c);getchar();return 0;}

函数指针数组 

void function0(int x){;}void function1(int x){}                        void function2(int x)                                          //函数定义{;}int main(){void(*f[3])(int) = { function0, function1, function2 };  //将这3个函数指针保存在数组f中  return 0;}



阅读全文
1 0
原创粉丝点击