当前位置: 首页 > news >正文

C语言—指针(3)

嘿嘿嘿嘿,你看我像指针吗?

不会写,等我啥时候会写了再说吧,真的累了,倦了

1.面试题
  1)定义整形变量i;                
  2)p为指向整形变量的指针变量;     
  3)定义整形一维数组p,它有n 个整形元素;
  4)定义一维指针数组p,它有n个指向整形变量的指针元素; 
  5)定义p为指向(含有n个整形元素的一维数组)的指针变量;
  6)p为返回整形函数值的函数;                            
  7)p为返回一个指针的函数,该指针指向整形数据;        
  8)p为指向函数的指针变量,该函数返回一个整形值;       
  9)p是一个指向整形指针变量的指针变量;

嘿嘿我猜是这样的,没时间了就这样凑合吧,我写给自己看的

#include <stdio.h>int main() {int i; // 1.定义整形变量iint *p; // 2.p为指向整形变量的指针变量int arr[n]; // 3.定义整形一维数组p,它有n个整形元素// 注意:C99及以后标准才支持变量长度数组,或者在定义数组时已知n的具体值int *p[n]; // 4.定义一维指针数组p,它有n个指向整形变量的指针元素int (*p)[n]; // 5.定义p为指向(含有n个整形元素的一维数组)的指针变量int p(); // 6.p为返回整形函数值的函数int *p(); // 7.p为返回一个指针的函数,该指针指向整形数据int (*p)(); // 8.p为指向函数的指针变量,该函数返回一个整形值int **p; // 9.p是一个指向整形指针变量的指针变量return 0;
}


2.动态申请一个具有10个float类型元素的内存空间,从一个已有的数组中拷贝数据,并找出第一次出现 12.35 的下标位置,并输出。

/*2.动态申请一个具有10个float类型元素的内存空间,从一个已有的数组中拷贝数据并找出第一次出现 12.35 的下标位置,并输出.*/#include <stdio.h>
#include <stdlib.h>int main() {float existingArray[] = {1.1, 2.2, 3.3, 4.4, 5.5, 12.35, 7.7, 8.8, 9.9, 10.1};float *dynamicArray = NULL;// 动态申请内存dynamicArray = (float *)malloc(10 * sizeof(float));if (!dynamicArray){puts("malloc failed!");return -1;}// 从已有的数组中拷贝数据for (int i = 0; i < 10; i++){dynamicArray[i] = existingArray[i];}// 查找第一次出现12.35的位置int index = -1;for (int i = 0; i < 10; i++){if (dynamicArray[i] == (float)12.35){index = i;break;}}if(index != -1){printf("第一次出现12.35的位置是: %d\n",index);}else{printf("未在数组中找到12.35\n");}// 释放内存free(dynamicArray);return 0;
}


3.动态申请一个整型数组,并给每个元素赋值,要求删除第3个元素;

/*3.动态申请一个整型数组,并给每个元素赋值,要求删除第3个元素;*/#include <stdio.h>
#include <stdlib.h>int main()
{// 动态申请一个能存储5个整型数据的数组int *array = (int*)malloc(5 * sizeof(int));if (!array){puts("malloc failed!");return -1;}// 给数组的每个元素赋值for (int i = 0; i < 5; i++){array[i] = i + 1;}printf("原始数组:");for(int i = 0;i < 5;i++){printf("%3d",array[i]);}printf("\n");// 删除第3个元素(在C中数组索引从0开始)// 将第3个元素之后的所有元素向前移动一个位置for (int i = 2; i < 4; i++){array[i] = array[i + 1];}// 释放被移动过的元素原来的位置的内存//free(array + 2);printf("修改后的数组:");for(int i = 0;i < 4;i++){printf("%3d",array[i]);}printf("\n");// 释放数组其余部分的内存free(array);return 0;
}


4.动态申请一个整型数组,并给每个元素赋值,要求在第4个元素后插入100;

/*4.动态申请一个整型数组,并给每个元素赋值,要求在第4个元素后插入100;*/#include <stdio.h>
#include <stdlib.h>int main()
{// 动态申请一个能存储5个整型数据的数组int *array = (int*)malloc(5 * sizeof(int));if (!array){puts("malloc failed");return -1;}// 给数组的每个元素赋值并打印printf("原始数组是:");for (int i = 0; i < 5; i++){array[i] = i + 1;printf("%d",array[i]);}printf("\n");// 在第4个元素后插入100// 注意:在C中数组索引从0开始,所以第4个元素是索引为3的元素int *insert_pos = array + 3;*insert_pos = 100;// 打印数组printf("改变之后的数组:");for (int i = 0; i < 5; i++){printf("%d ", array[i]);}printf("\n");// 释放数组内存free(array);return 0;
}


思考题:
    编写一个函数,实现 void *memmove(void *dest, const void *src, size_t n);的功能。 
       提示: 将形参dest,src 先强制类型转换为一个char* 类型,然后利用从后向前逐字节进行数据拷贝,最终返回dest 指针

#include <stdio.h>
#include <stdlib.h>void* mymemmove(void *dest,const void* src,size_t n)
{char *d  = (char*)dest;  //强制类型转换char *s  = (char*)src;// 如果源地址在目标地址之前,并且源地址和目标地址之间的距离大于要复制的字节数if((s < d) && ((s + n) > d)){//从后往前复制,避免覆盖未复制的数据d += n - 1;    //因为int是4个字节,在第四个元素插入的话是移动3个s += n - 1;while(n--){// *d-- = *s--;  //使代码更简洁*d = *s;d--;s--;}}else{// 如果源地址在目标地址之后,或者源地址和目标地址之间的距离小于或等于要复制的字节数while(n--){*d = *s;d++;s++;              }}return dest;  // 返回指向目标地址的指针
}int main(int argc,char** argv)
{int a[6] = {1,7,3,8,2};mymemmove(a+3,a+2,4*sizeof(int));  //调用mymemmove函数,将a+2到a+5的元素移动到a+3的位置a[2] = 100;for(register int i = 0; i < 6; i++)printf("%5d",a[i]);printf("\n");return 0;
}

http://www.lryc.cn/news/302948.html

相关文章:

  • 【八股文】面向对象基础
  • Day49 647 回文子串 516 最长回文子序列
  • 探秘GNU/Linux Shell:命令行的魔法世界
  • 基于STM32F407的coreJSON使用教程
  • keepalived双主模式测试
  • 微服务中的熔断、降级和限流
  • 2023年便宜的云服务器分享:最低26元4核16G
  • 汽车零部件制造业MES系统解决方案
  • 区块链/加密币/敏感/特殊题材专供外媒发稿,英文多国语言海外新闻营销推广
  • 初识Nginx
  • Rust语言之多线程
  • 现有的通用模型中融入少量中文数据没有太大意义少量的数据就能影响整个大模型
  • vscode 开发代码片段插件
  • 算法竞赛STL:array的使用方法
  • MyBatis sql拦截器实现一个自动根据租户进行分表的方案
  • TiDB in 2023, 一次简单的回顾丨PingCAP 唐刘
  • debug - 只要在内存中有显示相关的数据, 就会被CE找到
  • Redis 单个与多节点如何实现分布式锁
  • 频段划分学习射频知识的意义
  • Effective Objective-C 学习(四)
  • 欢迎来到IT时代----盘点曾经爆火全网的计算机电影
  • 光芒绽放:妙用“GLAD原则”打造标准的数据可视化图表
  • 如何设计出用于喜欢的界面
  • 第三篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:pyttsx3实现语音助手经典案例
  • JS中数组的常用方法
  • 最好用的论文检索网站
  • AI专题:AI巨轮滚滚向前
  • SpringBoot常见问题
  • 五种多目标优化算法(MOAHA、MOGWO、NSWOA、MOPSO、NSGA2)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)
  • 用 LangChain 和 Milvus 从零搭建 LLM 应用