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

C语言—指针

 碎碎念:做指针题的时候我仿佛回到了原点,总觉得目的是为了把框架搭建起来,我胡说的哈31

1.利用指针变量将一个数组中的数据反向输出。

/*1.利用指针变量将一个数组中的数据反向输出。*/#include <stdio.h>
#include <time.h>
#include <stdlib.h>int main(void)
{int arr[10] = {0};int n = sizeof(arr) / sizeof(arr[0]);srand(time(NULL));printf("原始数组为: ");int i = 0;for(;i < n;i++){arr[i] = rand() % 100;printf("%5d",arr[i]);}printf("\n");int *p = arr;  //指针指向数组元素printf("反响输出数组元素:");for(int i = n - 1;i >= 0;i--){printf("%5d", *(p + i));}printf("\n");return 0;}


2.利用指针变量计算下标为奇数的数组的和;

/*2.利用指针变量计算下标为奇数的数组的和;*/#include <stdio.h>int main(void)
{int arr[] = {1,2,3,4,5,6,7,8,9};int n = sizeof (arr) / sizeof (arr[0]);printf("数组元素为:");int i = 0,j = 0;for(;i < n;i++){printf("%3d",arr[i]);  // 打印数组元素,%3d指定宽度为3,右对齐}printf("\n");printf("数组下标为:");for(int i =0;i < n;i++){printf("%3d",i);  //打印数组下标,指定宽度为3,右对齐}printf("\n");int sum = 0;int *p;  //声明指针变量pp = arr;  //将数组首地址渎职给指针变量for(int i =0;i < n;i++){if(i % 2 != 0){sum += *(p + i);  //如果下标i为奇数,累加指针p后移i个位置的元素值}}printf("下标为奇数的数组元素之和为: %d\n",sum);return 0;}


3.确认整型,字符型,浮点型指针变量的大小;

are you sure?在Linux中Ubuntu中gcc编译器中指针变量类型大小都是8个字节

然后我又在devc++中编译(?????)

因此我得出了结论(我也不知道对不对),32位都是4个字节指针类型,使用的是64位系统且编译器支持64位指针,所有类型的指针大小都是8字节指针类型(?不是很懂哈哈哈)
4.利用指针变量输出字符数组中的所有字符。

/*4.利用指针变量输出字符数组中的所有字符。*/#include <stdio.h>int main(void)
{char str[] = "Hello,World";int n = sizeof(str) / sizeof(str[0]);char *ptr = str; //定义一个指向字符的指针printf("输出字符数组中的字符串:%s\n",str);   //输出字符串用%sint i = 0;printf("利用指针变量遍历字符数组输出字符:");for(;i < n;i++){printf("%c",*ptr);  //注意这里使用%c是因为str是一个字符数组而非一个字符串ptr++;  //移动指针到下一个字符}printf("\n");return 0;}

这个是让用户自己输入字符串的(此时要注意fgets函数自动添加换行符,所以不需要咱们额外添加)

/*4.利用指针变量输出字符数组中的所有字符。*/#include <stdio.h>int main(void)
{char str[32] = {0};printf("请输入一个字符串:");fgets(str,sizeof(str),stdin);int n = sizeof(str) / sizeof(str[0]);char *ptr = str; //定义一个指向字符的指针printf("通过指针变量输出结果:");int i = 0;for(;i < n;i++){printf("%c",*ptr);  //注意这里使用%c是因为str是一个字符数组而非一个字符串ptr++;  //移动指针到下一个字符}return 0;}


5.利用指针变量删除字符数组中的某个字符。(例如:  hello  删除l ---->  heo)

****这个算法相当经典,可以引申到删除任何数组中的字符,淦,暂时没听太懂就先这样吧。

/*5.利用指针变量删除字符数组中的某个字符。(例如:  hello  删除l ---->  heo)*///此时要注意删除字符不是把它变没而是让后面不删除的字符取覆盖到要删除的字符的位置#include <stdio.h>int main(void)
{char str[64] = {0};printf("请输入一个字符串:");fgets(str,sizeof(str),stdin);  //标准输入,如果把\n也作为遍历里的就不需要做处理换行符char  ch;printf("请输入一个待删除的字符:");ch  = getchar();   //从键盘获取字符,它的返回值会接受字符ch  //sanf("%c",&ch);char *p,*q;  //定义两个指针变量for(p = str,q = str; *p ; p++)  //pq指向字符数组首地址,p指针遍历所输入的字符串,q指针是要删除的字符{if(*p != ch){if(p != q)  //增加一个判断语句,会把效率提高,很多不必要的语句将不再执行*q = *p;  //当p指向元素不等于待删字符且p指向元素不等于q指向元素,将p指向元素赋给q指向的元素,去覆盖q++;  //q继续往下走看是不是待删除字符}}*q = '\0';  //'\0'对应的值就是0,不是字符数组的话不可以是*q = 0;,因为sr[64] = {0}很有可能结束了后面是0,停止不了假设不是一个字符数组  /*q - str*/;  //指针相减,当前元素前第n个元素的地址puts(str);  //输出后结果,fgets函数多一个换行符,,没有处理,所以输出结果会多一个换行return 0;
}

碎碎念:这个运行出来的换行符我暂时还不会删,等俺会了,回来改,或者有没有大佬帮忙纠错哈哈

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

相关文章:

  • c++作业
  • 什么是tomcat?tomcat是干什么用的?
  • 中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...
  • C# 如何实现一个事件总线
  • Python学习路线图
  • 作业2.14
  • 基于python+django+mysql的小区物业管理系统
  • 控制与状态机算法
  • sql常用语句小结
  • 云计算基础-虚拟机迁移原理
  • 云计算基础-云计算概念
  • 如何将阿里云服务器迁移
  • 如何将本地的python项目部署到linux服务器中
  • 每日五道java面试题之java基础篇(五)
  • HiveSQL——用户行为路径分析
  • 专利的申请
  • 嵌入式学习 C++ Day5、6
  • 阿里云香港服务器cn2速度测试和租用价格表
  • 《学成在线》微服务实战项目实操笔记系列(P92~P120)【下】
  • php数据类型以及运算符、判断条件
  • 大数据01-导论
  • 智能网卡(SmartNIC):增强网络性能
  • 算法刷题day14
  • 个性签名大全
  • 前端常用代码整理(不断更新中)— js,jquery篇(2)
  • 普中51单片机学习(六)
  • visual studio注册码
  • Studio One 6.5下载安装激活图文教程
  • Kubernetes(K8S)集群部署实战
  • 流畅的Python(十)-序列的修改、散列和切片