计算最长字符串长度
输入n (n<10)个字符串,输出其中最长字符串的有效长度。要求自定义函数 Int max_len ( char *s[],int n),用于计算有n个元素的指针数组s中最长的字符串的长度。

法一:
思路:设置一个指针数组与一个二维数组,使指针数组指向二维数组

#include<stdio.h>
#include<string.h>
int max_len(char*s[],int n)
{int i,j=0;for(i=0;i<n;i++){if(strlen(s[i])>strlen(s[j])){j=i;}}return strlen(s[j]);
}
int main()
{int i,n;char*s[10];char a[10][10];scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",a[i]);s[i]=a[i];}printf("%d",max_len(s,n));}

法二:
思路:利用动态分配,malloc,只有一个指针数组

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int max_len(char*s[],int n)
{int max=0;int i;for(i=0;i<n;i++){if(strlen(s[max])<strlen(s[i])){max=i;}}return strlen(s[max]);
}
int main()
{int n;int i;char*str[10];scanf("%d",&n);for(i=0;i<n;i++){str[i]=(char*)malloc(sizeof(char)*10);/*这边本来想用strlen(str)+1的,不知道为什么会出错,用了这种方法,只能运行,但效率低下*/scanf("%s",str[i]);}printf("%d\n",max_len(str,n));return 0;
}

首先我们要知道char * str[10]是什么
这个语句代表创建了一个有10个元素的数组str,str中的每一个元素都是一个指针。
指针是什么?简单来说,指针就是地址,指针本身一般不存任何有实际意义的内容。举例:你在一个箱子里放了10000块钱,这钱你想让你朋友帮你去自助机器买东西,他不知道钱在哪里,所以你给他一张写着地址的纸条让他去拿,这个地址就是指针。
但是他能直接拿这个地址去买东西吗?自助机器只接受它设定里需要的东西,你能和这机器说这个地址有10000块钱,所以我把纸条给你,你给我10000块钱的商品,这可能吗?如果你觉得可能,看见右上角那个X没有,点一下它然后赶紧去医院检查检查。
也就是说必须让这个“地址”变得具有真正的“价值”,让它符合自助机器的设定,成为它眼中真正的货币。在这道题里,货币就是字符串。
指针不是字符串,但有两种方法让它具有字符串的意义。第一种方式创建了一个二维数组 a [10] [10] ,并且让s[i]=a[i],那么这时10个指针就是指向了10个字符串。当程序运行时,虽然表明上对指针进行判定,实际上判定的是指针指向的内容——10个字符串。
第二种方法里没有设置别的字符串,那么就必须让指针本身就作为真正的字符串。在某种意义上,你可以把str[i]=(char*)malloc(sizeof(char)*10)当做是一维数组升维到二维数组的操作.

(char*)malloc(sizeof(char))就是给指针申请真正用来存储的空间,默认是一个char字符大小
(char*)malloc(sizeof(char)*10)给指针申请10个char类型大小的空间。
我们一般把一开始就分配空间的方式,如char*str[10]定义为静态分配。
而把str[i]=(char*)malloc(sizeof(char)*10)这种在str已定义后从堆空间中分配又分配的叫做动态分配
注意,上述说法问题很大,只是方便你快速理解。

现在你应该清楚了,在利用str[i]=(char*)malloc(sizeof(char)*10)把指针升维后,str已经从一维数组变成了二维数组,也就是说它具有了真正存放空间的能力,你随手写的纸条变成了具备法律效力的可以被机器识别的万元支票。乘10代表10个char大小,不管是类型还是大小都是根据你程序的需求而定的,char可以改成int,long等数据类型,10也可以改成别的数字。

(char*)malloc(sizeof(char))有什么用,为什么要这么写——简单介绍指针相关推荐

  1. c语言char aa 1000,char ** 与char * a[ ] 区别

    先看 char  *a [ ] ; 由于[ ] 的优先级高于* 所以a先和 [ ]结合,他还是一个数组,数组中的元素才是char * ,前面讲到char * 是一个变量,保存的地址.. 所以 char ...

  2. char数组和char*初始化

    char*动态分配: 用c语言中的(char*)malloc(sizeof(char)*n),或c++中的new char(n); char数组初始化 初始化 char str[10]="H ...

  3. C语言中 char s[] 和 char* s 的区别

    char s[] 和 char* s 的区别 1.数组本质 2.指针 指针的指向 3.字符数组 4.char * 与 char a[ ] 5.char ** 和char *a[] char *a[] ...

  4. c语言sizeof char,sizeof(char),sizeof(char*),sizeof(char[4]),

    32位系统,地址长度是32位(bit),也就是4Byte;64位系统,地址长度是64位(bit),也就是8Byte 运用1: char a[] = "hello world"; / ...

  5. c语言sizeof char,sizeof 你真的弄明白了吗?来看看这个例子

    原标题:sizeof 你真的弄明白了吗?来看看这个例子 sizeof基础 在C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数).其 ...

  6. C++中const char*, string 与char*的转化

    C++中const char*, string 与char*的转化 原文:https://blog.csdn.net/zhang_alongzd/article/details/52790905 版权 ...

  7. ptr = (char *)malloc(0)

    char *ptr; if ((ptr = (char *)malloc(0)) == NULL) puts( "Got a null pointer "); else puts( ...

  8. char *s和char s[]的区别与联系以及strlen()和sizeof()的用法

    #include<iostream> using namespace std;void reverse(char s[]) {char *p, *q, temp;p = s;//p指向字符 ...

  9. 简单问题:sizeof(char型数组)为数组大小,而不是4, 为什么? 100!

    转载自:http://topic.csdn.net/t/20030701/23/1979882.html char   A[10];  int   len   =   sizeof(A);  len的 ...

最新文章

  1. 富士通推出MB95200H/10H/20H系列用于家电的LPC微控制器
  2. 如何打开.npz文件
  3. 【php】命名空间的影响
  4. webpack 编译stylus_webpack 文档更新日志(9.129.29)
  5. python 建站需求_python建站基础环境配置
  6. 生活 list.php,list.php
  7. RocketMQ(三)—— 集群模式的说明
  8. 洛谷 1972 莫队
  9. Windows Server 2016-管理Active Directory复制任务
  10. win10安装nessus8.10
  11. js一键批量打印_JS 实现选中内容批量打印/导出
  12. 省级面板数据(2000-2019)三:人口比、抚养比、就业、失业、离婚、教育(stata版)
  13. Vue核心技术-41,vue-router-导航守卫
  14. android 11.0 12.0去掉前置摄像头闪光灯功能
  15. N2N组建虚拟局域网——筑梦之路
  16. 笔记本电脑无法连接WiFi,如何解决
  17. visitor 模式
  18. 为什么选择Opera而不是火狐
  19. 网络安全学习--随笔
  20. NKOJ 3702 打鼹鼠

热门文章

  1. poj 1932(spfa判断环)
  2. poj 3308(最小割求解最小点权覆盖)
  3. hdu 1712(分组背包)
  4. poj 1324(BFS+状态压缩)
  5. 类模板非类型形参实现Stack
  6. 设计模式学习之代理模式学习(一)
  7. python取出字典中的所有值的两种方法
  8. Jenkins+Jmeter持续集成笔记(四:定时任务和邮件通知)
  9. Linux学习笔记 -- 文本编辑器之 vi与vim
  10. mac之brew安装卸载使用