0
点赞
收藏
分享

微信扫一扫

指针笔试

一 .指针笔试讲解

二. 回调函数

本节内容如下

一.指针笔试讲解

#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int (*p)(int, int) = Add;
int sum = (*p)(1, 2);
printf("%d\n", sum);
return 0;
}

指针笔试_数组名

#include<stdio.h>
int main()
{
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(a+0));
printf("%d\n", sizeof(*a));
printf("%d\n", sizeof(a+1));
printf("%d\n", sizeof(a[1]));
printf("%d\n", sizeof(&a));
printf("%d\n", sizeof(*&a));
printf("%d\n", sizeof(&a[0]+1));
printf("%d\n", sizeof(&a[0]+1));
return 0;
}

指针笔试_回调函数_02

指针笔试_数组名_03

char arr[] = { 'a','b','c','d','e','f', };
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0] + 1));
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr + 0));
// printf("%d\n", strlen(*arr));
//printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr + 1));
printf("%d\n", strlen(&arr[0] + 1));
return 0;
}

指针笔试_回调函数_04

指针笔试_数组名_05

指针笔试_回调函数_06

char* p = "abcdef";
printf("%d\n", strlen(p));
printf("%d\n", strlen(p+1));
//printf("%d\n", strlen(*p));
//printf("%d\n", strlen(p[0]));
printf("%d\n", strlen(&p));
printf("%d\n", strlen(&p+1));
printf("%d\n", strlen(&p[0]+1));

printf("%d\n", sizeof(p));
printf("%d\n", sizeof(p + 1));
printf("%d\n", sizeof(*p));
printf("%d\n", sizeof(p[0]));
printf("%d\n", sizeof(&p));
printf("%d\n", sizeof(&p + 1));
printf("%d\n", sizeof(&p[0] + 1));

指针笔试_数组名_07

指针笔试_数组_08

char arr[] = "abcdef";
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
//printf("%d\n", strlen(*arr));
//printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr+1));
printf("%d\n", strlen(&arr[0]+1));

printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));

指针笔试_数组名_09

指针笔试_数组名_10

int main()
{
int a[5] = { 1,2,3,4,5 };
int* pr = (int*)(&a + 1);
printf("%d %d", *(a + 1), *(pr - 1));
return 0;
}

指针笔试_数组名_11

#include<stdio.h>
int main()
{
int a[5] = { 1,2,3,4,5 };
int* pa1 = (int*)(&a + 1);
int* pa2 = (int*)((int)a + 1);
printf("%x %x", pa1[-1], *pa2);
return 0;
}

指针笔试_数组名_12

int main()
{
int aa[2][5] = { 1,2,3,4,5,6,7,8,9,10 };
int* pa1 = (int*)(&aa + 1);
int* pa2 = (int*)(*(aa + 1));
printf("%d,%d", *(pa1 - 1), *(pa2 - 1));
return 0;
}

指针笔试_数组名_13

一般情况下数组名是首元素地址。

有例外情况

1.sizeof(数组名)表示整个数组

2.&数组名 表示整个数组

二.回调函数:通过函数指针调用的函数叫做回调函数。

qsort函数可以用来排序任意类型的数据,(库函数)。

表达式;
void sqort(void *base,size-t num,size-t width,
int (*cmp)(const void*e1,const void*e2));
//void*类型的指针,可以接受任意类型的地址
int char_cmp(const void* e1, const void* e2)
{
assert(e1&& e2);

//因为数组里存的是字符串的地址,所以要强制类型转换成(char **)
//然后再解引用一下才是字符串的地址
return strcmp(*(char**)e1, *(char**)e2);

}

指针完结






举报

相关推荐

0 条评论