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++知识库]诺亚方舟——第四天

第四天!!!!!
——————————————————————————————————————————
今天我们来学C语言的灵魂——指针,认真学别眨眼哦!
学习内容:
1.指针即地址
当变量被定义时,为了能够准确的访问这些数据,他们都被编上了编号,也就是地址
(可以这样想,定义变量就像建造房子,为了能让人准确找到房子,
当然你就需要一个牌子——地址,让人准确地找到房子!)
2.指针的定义
C语言中有一种变量,可以用它来存放指针,这种变量成为指针变量。整型变量
用来存储整型,浮点型变量用来存储浮点型数据,那么很好理解,指针变量用来
存储地址。
3.内存申请(这个我不会,并且暂时也没有用到过)
C语言中,利用函数 malloc 来申请内存,传入参数为申请内存的字节数,返回值为申请到
的内存的首地址,是什么类型的地址,就要强转成什么类型。
?? ?看代码直接懂:
?? ?int *p=(int *)malloc(1024);
? ? ? ? p ?代表的是申请到的内存,并且有效内存字节数为 1024.
? ? ? ? 如果我们要申请一个长度为 n ?的 ?整型数组的内存,可以这么写:
?? ?int *p=(int *)malloc(sizeof(int)*n);//左边第一个*是指针的符号,后面的是乘号
————————————————————————————————————————
接下来,用题目带一下知识点吧!
1.力扣 1470.重新排列数组
#include<stdio.h>
#include<stdlib.h>//用malloc函数需要写的头文件
int *shuffle(int *nums,int numsSize,int n,int *returnSize)
{
?? ?int i,j;
?? ?int *ret=(int *)malloc(sizeof(int)*numsSize);//申请一个和nums数组一样大的内存空间
?? ?for(i=0,j=0;i<numsSize,j<n;i+=2,j++)
?? ?{
?? ??? ?ret[i]=nums[j];
?? ?}
? ? ?? ?for(i=1,j=n;i<numsSize,j<numsSize;i+=2,j++)
? ??? ? {
? ? ? ? ?? ?ret[i]=nums[j];
? ??? ? }?
? ? ?? ?*returnSize=numsSize;
?? ?return ret;
}
int main()
{
?? ?int n;
?? ?int nums[10]={1,3,5,7,9,2,4,6,8,10};
?? ?int numsSize=10;
?? ?int *p = shuffle(nums,numsSize,numsSize/2,&n);//定义一个指针来存放返回数组的首地址,遍历输出数组元素即可!!!!
?? ?for(int i=0;i<n;i++)
?? ?{
?? ??? ?printf("%d ",*(p+i));
?? ?}
?? ?
}
2.力扣 1929.数组串联
int* getConcatenation(int* nums, int numsSize, int* returnSize){
? ? int i;
? ? int *ret = (int *)malloc(2*numsSize*sizeof(int)); // (1)
? ? for(i = 0; i < numsSize; ++i) {
? ? ? ? ret[i+numsSize] = ret[i] = nums[i]; ? ? ? ? ? // (2)
? ? }
? ? *returnSize = 2 * numsSize; ? ? ? ? ? ? ? ? ? ? ? // (3)?
? ? return ret;
}
3.力扣 1929.基于排列构建数组
int* buildArray(int* nums, int numsSize, int* returnSize){
? ? int i;
? ? int *ret = (int *)malloc( sizeof(int) * numsSize );
? ? for(i = 0; i < numsSize; ++i) {
? ? ? ? ret[i] = ?nums[ ?nums[i] ]; ? ? ? ? ? // (1)
? ? }
? ? *returnSize = numsSize;
? ? return ret;
}
4.力扣 1480. 一维数组的动态和
int* runningSum(int* nums, int numsSize, int* returnSize){
? ? int i;
? ? int *ret = (int *)malloc( numsSize * sizeof(int) );
? ? for(i = 0; i < numsSize; ++i) { ? ?// (1)
? ? ? ? ret[i] = nums[i];
? ? ? ? if(i) {
? ? ? ? ? ? ret[i] += ret[i-1]; ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? }
? ? }
? ? *returnSize = numsSize;
? ? return ret;
}
5.力扣 剑指 Offer 58 - II. 左旋转字符串
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *reverseLeftWords(char *s,int k)
{
?? ?int i,j;
?? ?int l=strlen(s);
?? ?char *ret=(char *)malloc((l+1)*sizeof(char));
?? ?for(i=k,j=0;i<l;i++,j++)
?? ?{
?? ??? ?ret[j]=s[i];
?? ?}
?? ?for(i=0;i<k;i++)
?? ?{
?? ??? ?ret[j++]=s[i];
?? ?}
?? ?ret[l]='\0';//!!!!
?? ?return ret;
}
int main()
{
?? ?char s[]={"abcdefg"};
?? ?int k;
?? ?scanf("%d",&k);
?? ?char *p=reverseLeftWords(s,k);
?? ?puts(p);
}

优解:
char* reverseLeftWords(char* s, int k){
? ? int i;
? ? int n = strlen(s);
? ? char *ret = (char *)malloc( (n + 1) * sizeof(char) ); ? ?// (1)
? ? for(i = 0; i < n; ++i) {
? ? ? ? ret[i] = s[(i + k) % n]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 这样就可以一下子赋值
? ? }
? ? ret[n] = '\0'; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // (3)
? ? return ret;
}

6.力扣 1108.IP地址无效化
char * defangIPaddr(char * address){
? ? char *ret = (char *)malloc(1000 * sizeof(char)); ? // (1)
? ? int returnSize = 0;
? ? int i;
? ? for(i = 0; address[i]; ++i) { ? ? ? ? ? ? ? ? ? ? ?// (2)
? ? ? ? if(address[i] == '.') {
? ? ? ? ? ? ret[ returnSize++ ] = '[';
? ? ? ? ? ? ret[ returnSize++ ] = '.';
? ? ? ? ? ? ret[ returnSize++ ] = ']';
? ? ? ? }else {
? ? ? ? ? ? ret[ returnSize++ ] = address[i];
? ? ? ? }
? ? }
? ? ret[ returnSize ] = '\0'; ? ? ? ? ? ? ? ? ? ? ? ? ?// (3)
? ? return ret;
}
7.力扣 剑指 Offer 05. 替换空格
char* replaceSpace(char* s){
? ? char *ret = malloc( sizeof(char) * 30001 ); // (1)
? ? int i, retSize = 0;
? ? for(i = 0; s[i]; ++i) {
? ? ? ? if(s[i] == ' ') {
? ? ? ? ? ? ret[retSize++] = '%%';
? ? ? ? ? ? ret[retSize++] = '2';
? ? ? ? ? ? ret[retSize++] = '0';
? ? ? ? }else {
? ? ? ? ? ? ret[retSize++] = s[i];
? ? ? ? }
? ? }
? ? ret[retSize] = '\0';
? ? return ret;
}
8.力扣 1365. 有多少小于当前数字的数字
int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize){
? ? int *ret = (int *)malloc(numsSize * sizeof(int));
? ? int i, j;
? ? for(i = 0; i < numsSize; ++i) {
? ? ? ? ret[i] = 0; ? ? ? ? ? ? ? ? ? ? ?// (1)
? ? ? ? for(j = 0; j < numsSize; ++j) { ??
? ? ? ? ? ? if(nums[j] < nums[i]) { ? ? ?// (2)
? ? ? ? ? ? ? ? ++ret[i];
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? *returnSize = numsSize;
? ? return ret;
}
9.力扣 剑指 Offer 17. 打印从1到最大的n位数
int* printNumbers(int n, int* returnSize){
? ? int i;
? ? int f = 1;
? ? int *ret;

? ? for(i = 0; i < n; ++i) {
? ? ? ? f *= 10;
? ? }
? ? --f;
? ? *returnSize = f; ? ? ? ? ? ? ? ? ? ? ? ?// (1)
? ? ret = (int *)malloc( f * sizeof(int) );
? ? for(i = 1; i <= f; ++i) {
? ? ? ? ret[i-1] = i; ? ? ? ? ? ? ? ? ? ? ? // (2)
? ? }
? ? return ret;
}
10.按既定顺序创建目标数组(这题没时间搞了!!!)
int* createTargetArray(int* nums, int numsSize, int* index, int indexSize, int* returnSize){
? ? int len = 0;
? ? int i, j, ins, idx;
? ? int *ret = (int *) malloc( ?sizeof(int) * numsSize );
? ? for(i = 0; i < numsSize; ++i) {
? ? ? ? idx = index[i];
? ? ? ? ins = nums[i];
? ? ? ? for(j = len; j > idx; --j) { ?// (1)
? ? ? ? ? ? ret[j] = ret[j-1];
? ? ? ? }
? ? ? ? ret[idx] = ins; ? ? ? ? ? ? ? // (2)
? ? ? ? ++len; ? ? ? ? ? ? ? ? ? ? ? ?// (3)
? ? }
? ? *returnSize = len;
? ? return ret;
}
——————————————————————————————————————————————————
总结:写的有些匆忙,都23:32啦,刚刚完成!


?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 15:45:21  更:2021-12-14 15:46:07 
 
开发: 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年11日历 -2024/11/24 12:49:50-

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