C---指针的进阶

1.数组指针与指针数组?

(1)指针数组:是数组,用来存放指针的。

Eg:Int * arr[10];

(2)数组指针:是指针(存放数组的地址),指针指向数组。

Eg:Int* (*p)[10];

(3)函数指针:是指针(存放函数的地址),指针指向函数。

Eg:int (*p)(int,int)

(4)函数指针数组:是数组,数组用来存放函数指针(即函数的地址)。

Eg:int (*p[10])(int,int)

(5)指向函数指针数组的指针:是指针,指针指向数组,数组的每个元素是函数指针。

Eg:int(*(*p)[10])(int,int);

2. 辨别下列的代码?

(1)int arr[5];

整型数组 该数组有5个元素每个元素是int ;

(2)int *parr1[10];

指针数组  该数组有10个元素,每个元素是int * ;

(3)int (*parr2)[10];

数组指针 该指针指向数组,数组有10个元素,每个元素是int

(4)int (*parr3[10])[5];

指针数组,数组有10个元素,每个元素是数组指针;该指针指向数组,数组有5个元素,每个元素是int型。

(5)(*(void (*)())0)();

(void (*)())0  先把0强制类型转换为函数指针(指针指向的函数返回值为void,函数无参数),再对强制类型转换的结果解引用,最后进行函数调用。

(6)void (*signal(int , void(*)(int)))(int);

signal(int , void(*)(int))这是一个函数,函数的第一个参数是int,第二个参数是void(*)(int)函数指针。signal函数的返回值是void(*)(int)

这是一个返回类型是函数指针的函数声明,该函数的参数是一个int类型和一个函数指针。

3.add&add,arr&arr的区别

(1)add和&add的结果一摸一样,两者无区别,两者可随便写。

(2)arr和&arr

arr:是首元素的地址

&arr:取出的是整个数组的地址,但是只保存第一个元素的地址。

4.冒泡函数的实现?

//4 3 2 1     //3 2 1 4  //2 1 3 4

//3 4 2 1    //2 3 1 4  //1 2

//3 2 4 1   //2 1 3 4

//3 2 1 4

//4个元素进行3趟冒泡排序,每一趟进行元素个数减一次比较。

bubble_sort(int arr[], int sz)

{

      //冒泡排序的趟数

      for (int i = 0; i < sz - 1; i++)

      {

            //每一趟进行比较的对数

            for (int j = 0; j < sz - 1 - i; j++)

            {

                  if (arr[j] > arr[j + 1])

                  {

                        int tmp = arr[j+1];

                        arr[j + 1] = arr[j];

                        arr[j] = tmp;

                  }

            }

      }

}

int main()

{

      int arr[] = { 9,8,7,6,5,4,3,2,1,0 };

      int sz = sizeof(arr) / sizeof(arr[0]);

      bubble_sort(arr, sz);

      //打印数组的每个元素

      for (int i = 0; i < sz; i++)

      {

            printf("%d\n", arr[i]);

      }

      return 0;

}

5.void*(无类型的指针)指针类型的相关知识点?

void *类型的指针可以接受任意类型的地址。

void *类型的指针不能进行解引用操作。

void *类型的指针不能进行加减整数的操作。

Eg :

int a=10 ;

void *p=&a ;

6.qsort()函数的相关知识点?

void qsort(

    void *base,

    size_t nmemb,

    size_t size,

    int (*compar)(const void *, const void *)

    );

第一个参数:待排序数组的首元素地址

第二个参数,待排序数组的元素个数

第三个函数:待排序数组的每个元素的大小单位是字节

第四个函数:是函数指针,比较两个元素所用函数的地址---这个函数使用者自己实现。

函数指针的两个参数:待比较的两个元素的地址。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值