IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言1.指针(进阶)作业(一):函数指针、数组指针、函数指针数组 ,杨氏矩阵,左旋字符串 -> 正文阅读

[C++知识库]C语言1.指针(进阶)作业(一):函数指针、数组指针、函数指针数组 ,杨氏矩阵,左旋字符串

  1. 关于指针描述不正确:
    a. free释放掉一个指针内容后,指针变量的值被置为NULL
    B.32位系统下任何类型指针的长度都是4个字节
    C.指针的数据类型声明的是指针实际指向内容的数据类型
    D.野指针是指向未分配或者已经释放的内存地址
    解释:a. free后,指针还指向原来地址,但free是为告诉系统这片内存地址可再分配,已被收回。
    C 指针的数据类型,不是为了自己,自己作为指针,在它之前标记的是心中所存内容的类型。
  2. 关于下面代码描述正确的是:( )
    char* p = “hello bit”;
    存的是常字符串"hello bit"的首字母地址
  3. 下面哪个是数组指针( )
    A.int** arr[10]
    B.int (arr[10])
    C.char *(*arr)[10]
    D.char(
    )arr[10]

C 数组指针:指向数组,且数组存的是字符指针char *,每个数组大小为10

如果写为 char (*arr)[10],也是数组指针,数组大小为10,所存是是char字符

  1. 下面哪个是函数指针?( )
    A.int* fun(int a, int b);
    B.int(*)fun(int a, int b);
    C.int (*fun)(int a, int b);
    D.(int *)fun(int a, int n);

函数指针:
返回类型 (*p_name)(parse1, parse2) = &fun;
函数指针、数组指针,都是(*p)

  1. 函数指针指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?下面哪个是正确的?( )
    A.int (*(*F)(int, int))(int)
    B.int (F)(int, int)
    C.int (
    (F)(int, int))
    D.
    (*F)(int, int)(int)

B是错的,A
它是一个函数指针: (*F)(int , int)
如果简单的函数指针,返回int,参数int, int (*F) (int ,int)
当它要返回一个函数指针,所以再加个*
而返回的函数指针的返回值是int,所以外面加int,且形参是int
所以 int (*(*F)(int, int))(int)

  1. 数组指针D用错了,B很标准
    请添加图片描述

请添加图片描述
如何定义一个int类型的指针数组,数组元素个数为10个:( )
A.int a[10]
B.int (*a)[10]
C.int *a[10];
D.int (*a[10])(int);

B:肯定对,
C:a和[10]先结合,剩余是内容:int *所以它是指针数组
D: a[10]是数组,加*表示它装着函数,装着的函数返回int,参数int。总之,函数指针数组,其中指针二字只是解释,因为所存必须是地址,所以它是个函数指针。

  1. 杨氏矩阵
    有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
    要求:时间复杂度小于O(N);

按照右下左的顺序

int matrixFind(int arr[][5], int find, int row, int col)
{
	int x = 0;
	int y = col - 1;
	int tiaojian = 0 <= x && x <= row - 1 && 0 <= y && y <= col - 1;
	if (tiaojian)
	{
		printf("进来了\n");
		// 先找到它该在的那一行,向下走
		while (tiaojian&&arr[x][y]<find)
		{
			x++;
		}
		// 先在那一行最后比它大或者等于它。开始向左找
		while (tiaojian&&arr[x][y] > find)
		{
			y--;
		}
		// 找完:它处于小于它或者等于它,等于就不执行了,小于它时,继续往下走
		while (tiaojian&&arr[x][y]<find)
		{
			x++;
		}
		// 此时,应该等于它或大于它,大于继续向左走
		while (tiaojian && arr[x][y] > find)
		{
			y--;
		}
	}
	if (arr[x][y] == find) { return 1; }
	else { return 0; }
}


int main()
{
	int arr[3][5] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150};
	int(*p)[5] = arr;
	int find = 0;
	scanf("%d", &find);
	// 按照每一行最右边,再左,再
	int res = matrixFind(arr,find,3,5);
	printf("结果为:%d", res);
	return 0;
}
  1. 左旋k:
    把字符串前k个一个一个往后放
 左旋:

char* zuoxuan(char *left, char *new, int k, int sz)
{
	int  pos = 0;
	// k~sz-k-1
	char* t = left;
	for (int i = 0; i <= sz-k-1; i++)
	{
		new[i] = *(left+k);
		left++;
	}
	// sz-k~sz-1
	for (int i = sz-k;i<=sz-1; i++)
	{
		new[i] = *t;
		t++;
	}
	// 分两端赋值
	// 0~sz-k-1 = k~sz-1
	// sz-k = 0~k-1;
	return new;
}

int main()
{
	char s[] = "hello";
	int sz = strlen(s);
	int k = 0;
	scanf("%d", &k);
	char new[101] = { 0 };
	char * res = zuoxuan(s, new, k, sz);
	printf("%s", res);
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-27 17:12:03  更:2022-05-27 17:13:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 17:12:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码