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

广州印刷网站建设广州教育网站设计公司

广州印刷网站建设,广州教育网站设计公司,小说阅读网站系统模板下载,手机网页制作与网站建设✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 指针 1、数组和指针笔试题解析 1.1、字符数组 1.1.1、代码1: 1.1.2、代码2: 1.1.3、代码3: 1.1.4、代码4: 1…

个人主页: 熬夜学编程的小林

💗系列专栏: 【C语言详解】 【数据结构详解】

指针

1、数组和指针笔试题解析

 1.1、字符数组

1.1.1、代码1:

1.1.2、代码2:

1.1.3、代码3:

1.1.4、代码4:

1.1.5、代码5:

1.1.6、代码6:

总结


1、数组和指针笔试题解析

 1.1、字符数组

   1.1.1、代码1:

char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));

char arr[] = {'a','b','c','d','e','f'};

//单引号初始化的字符数组,有几个字符则实际存储几个字符,数组内容有"abcdef"
printf("%d\n", sizeof(arr));

//数组名单独放在sizeof内部,代表整个数组,因此为6字节。
printf("%d\n", sizeof(arr+0));

//数组名表示首元素地址,+0还是首元素地址,实质是地址,在x64环境为8字节,x86环境为4字节。
printf("%d\n", sizeof(*arr));

//数组名为首元素地址,解引用为首元素,类型为char,因此大小为1字节。
printf("%d\n", sizeof(arr[1]));

//arr[1]为第二个元素,类型为char,因此大小为1字节。
printf("%d\n", sizeof(&arr));

//&arr为整个数组地址,但是实质还是地址,在x64环境为8字节,x86环境为4字节。
printf("%d\n", sizeof(&arr+1));

//&arr为整个数组地址,+1则走数组大小步,但是实质还是地址,在x64环境为8字节,x86环境为4字节。
printf("%d\n", sizeof(&arr[0]+1));

//arr[0]为第一个元素,&arr为第一个元素地址,+1则走char类型步,但是实质是地址,x64环境为8字节,x86环境为4字节。

1.1.2、代码2:

char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr+1));
printf("%d\n", strlen(&arr[0]+1));

strlen计算的是'\0'之前的字符个数,参数为指针。

size_t strlen ( const char * str );

char arr[] = {'a','b','c','d','e','f'};

//单引号初始化的字符数组,有几个字符则实际存储几个字符,数组内容有"abcdef"
printf("%d\n", strlen(arr));

//arr为数组首元素地址,在数组初始化中没有'\0',但是strlen会一直执行,直到找到'\0'才停止计算,因此该值为大于等于字符串长度6的随机值。
printf("%d\n", strlen(arr+0));

//arr为数组首元素地址,arr+0还是首元素地址,在数组初始化中没有'\0',但是strlen会一直执行,直到找到'\0'才停止计算,因此该值为大于等于字符串长度6的随机值。
printf("%d\n", strlen(*arr));

//arr为首元素地址,*arr为数组第一个元素,但是函数参数要求为指针,此处为char类型的值,因此该代码错误。
printf("%d\n", strlen(arr[1]));

//arr[1]为第二个元素,但是函数参数要求为指针,此处为char类型的值,因此该代码错误。
printf("%d\n", strlen(&arr));

//&arr为整个数组地址,但是该地址的值还是首元素地址的值,在数组初始化中没有'\0',但是strlen会一直执行,直到找到'\0'才停止计算,因此该值为大于等于字符串长度6的随机值。
printf("%d\n", strlen(&arr+1));

//&arr为整个数组地址,+1则走整个数组大小步,但是我们并不知道'\0'的位置,因此该值为大于等于字符串长度6的随机值。
printf("%d\n", strlen(&arr[0]+1));

//&arr[0]为第一个元素地址,+1则为第二个元素地址,在数组初始化中没有'\0',但是strlen会一直执行,直到找到'\0'才停止计算,因此该值为大于等于字符串长度6的随机值。

注:想要得到结果,需要注释掉其中两个错误代码,否则会引发下面的异常。

代码2运行结果及分析:

1.1.3、代码3:

char arr[] = "abcdef";
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));

char arr[] = "abcdef";

//双引号包裹的字符串在末尾会自动加'\0',因此字符串实际的内容有abcdef\0。

//sizeof计算的是占用空间大小,大小为字节。
printf("%d\n", sizeof(arr));

//数组名arr单独放在sizeof内部代表整个数组大小,因此为7字节(\0占用一个字节)。
printf("%d\n", sizeof(arr+0));

//数组名arr不是单独放在sizeof内部,表示首元素地址,+0还是首元素地址,在x86环境下为4字节,x64环境为8字节。
printf("%d\n", sizeof(*arr));

//数组名arr不是单独放在sizeof内部,表示首元素地址,*arr为首元素,类型为char,因此为1字节。
printf("%d\n", sizeof(arr[1]));

//arr[1]为第二个元素,类型为char,因此为1字节。
printf("%d\n", sizeof(&arr));

//&arr为整个数组的地址,但是实质还是地址,在x86环境下为4字节,x64环境为8字节。
printf("%d\n", sizeof(&arr+1));

//&arr为整个数组的地址,+1则走整个数组大小步,但是实质还是地址,在x86环境下为4字节,x64环境为8字节。
printf("%d\n", sizeof(&arr[0]+1));

//&arr[0]为首元素地址,+1则走一个char类型大小步,即为第二个元素地址,在x86环境下为4字节,x64环境为8字节。

1.1.4、代码4:

char arr[] = "abcdef";
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr+1));
printf("%d\n", strlen(&arr[0]+1));

char arr[] = "abcdef";

//双引号包裹的字符串在末尾会自动加'\0',因此字符串实际的内容有abcdef\0

//strlen计算的是'\0'之前的字符个数,需要包含头文件#include<string.h>

printf("%d\n", strlen(arr));

//数组名arr为数组首元素地址,首元素到'\0'之间有6个元素,因此长度为6。
printf("%d\n", strlen(arr+0));

//数组名arr为数组首元素地址,+0还是首元素地址,首元素到'\0'之间有6个元素,因此长度为6。
printf("%d\n", strlen(*arr));

//数组名arr为数组首元素地址,*arr为首元素,但是函数的参数为指针,参数不匹配,因此该代码错误。
printf("%d\n", strlen(arr[1]));

//arr[1]为第二个元素,但是函数参数为指针,参数不匹配,因此该代码错误。
printf("%d\n", strlen(&arr));

//&arr为整个数组地址,地址的值为首元素地址的值,首元素到'\0'之间有6个元素,因此长度为6.
printf("%d\n", strlen(&arr+1));

//&arr为整个数组地址,+1则走整个数组大小步,此时不知道'\0'在什么位置,因此为随机值。
printf("%d\n", strlen(&arr[0]+1));

//&arr[0]为首元素地址,+1位第二个元素地址,第二个元素到'\0'之间有5个元素,因此长度为5。

注:想要得到结果,需要注释掉其中两个错误代码。

1.1.5、代码5:

char *p = "abcdef";
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(p+1));
printf("%d\n", sizeof(*p));
printf("%d\n", sizeof(p[0]));
printf("%d\n", sizeof(&p));
printf("%d\n", sizeof(&p+1));
printf("%d\n", sizeof(&p[0]+1));

char *p = "abcdef";//此处为字符常量

//p为指针变量,指向字符常量的首元素地址
printf("%d\n", sizeof(p));

//p为指针变量,指向第一个字符,x64环境大小为8字节,x86环境为4字节。
printf("%d\n", sizeof(p+1));

//p为指针变量,p+1同样为指针变量,走char类型大小步,指向第二个字符,x64环境大小为8字节,x86环境为4字节。
printf("%d\n", sizeof(*p));

//p为指针变量,指向第一个字符,*p则为第一个字符,类型为char,因此为1字节。
printf("%d\n", sizeof(p[0]));

//p[0]为第一个字符,类型为char,因此为1字节。
printf("%d\n", sizeof(&p));

//p为指针变量,指向第一个字符,&p为指针变量的地址,x64环境大小为8字节,x86环境为4字节。
printf("%d\n", sizeof(&p+1));

//p为指针变量,指向第一个字符,&p为指针变量的地址,&p+1同样为地址,x64环境大小为8字节,x86环境为4字节。
printf("%d\n", sizeof(&p[0]+1));

//&p[0]为第一个字符的地址,+1位第二个字符的地址,x64环境大小为8字节,x86环境为4字节。

1.1.6、代码6:

char *p = "abcdef";
printf("%d\n", strlen(p));
printf("%d\n", strlen(p+1));
printf("%d\n", strlen(*p));
printf("%d\n", strlen(p[0]));
printf("%d\n", strlen(&p));
printf("%d\n", strlen(&p+1));
printf("%d\n", strlen(&p[0]+1));

char *p = "abcdef";//此处为字符常量

//p为指针变量,指向字符常量的首元素地址

printf("%d\n", strlen(p));

//p为指针变量,指向第一个字符,第一个字符到'\0'之间有6个元素,因此长度为6。
printf("%d\n", strlen(p+1));

//p为指针变量,p+1同样为指针变量,走char类型大小步,指向第二个字符,第二个字符到'\0'之间有5个元素,因此长度为5。
printf("%d\n", strlen(*p));

//p为指针变量,指向第一个字符,*p则为第一个字符,但是函数参数为指针,参数不匹配,因此该代码错误。
printf("%d\n", strlen(p[0]));

//p[0]为第一个字符,但是函数参数为指针,参数不匹配,因此该代码错误。
printf("%d\n", strlen(&p));

//p为指针变量,指向第一个字符,&p为指针变量的地址,该地址到'\0'之间不知道有几个元素,因此为随机数。
printf("%d\n", strlen(&p+1));

//p为指针变量,指向第一个字符,&p为指针变量的地址,&p+1同样为地址,该地址到'\0'之间不知道有几个元素,因此为随机数。
printf("%d\n", strlen(&p[0]+1));

//&p[0]为第一个字符的地址,+1位第二个字符的地址,第二个字符到'\0'之间有5个元素,因此长度为5。

 数组名的意义:

1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。

2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

3. 除此之外所有的数组名都表示首元素的地址。

总结


本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!

http://www.yayakq.cn/news/196193/

相关文章:

  • 全屏幕网站模板怎么查看网站收录
  • 有没有免费的推广网站定制网站开发报价单
  • 文化传媒公司网站建设一级服务器二级服务器
  • 用tornado做网站企业网站是如何做的
  • 模拟建设官方网站建设网站一定需要云服务器么
  • 在线自助设计平台南京网络优化培训
  • 如何变更网站备案信息查询公众号怎么做链接
  • 机关局域网网站建设wordpress 交互页面
  • 搜索网站有哪些托管代运营
  • wapcms建站系统深圳办公室软装
  • 男女性直接做的视频网站小规模公司怎么注册
  • 什么是网站内页深圳建站工作室
  • 网站在网络文化建设方面的成果高端网站建设那公司好
  • 厦门维品网站建设湖南响应式网站推荐
  • 怎么修改公司网站图片开源中国
  • 哪些调查网站可以做问卷赚钱让芯片公司得到尊重的是原创技术
  • 赣州做网站公司wordpress 七牛非插件
  • wordpress 页面属性杭州seo中心
  • 专门卖建筑材料的网站健身网站建设
  • 做网站汉中app开发要多少钱
  • 河北省城乡规划建设局官方网站新手站长做什么网站
  • 重庆网站推广免费软件韩都衣舍网站建设ppt
  • 手机网站后台管理网站建设朋友圈
  • 青岛建设集团官方网站店铺设计公司
  • 梅州建设公司网站精美ppt模板下载免费
  • 个体户 做网站wordpress显示注册按钮
  • 南京制作网站多少钱公司改名字重新备案网站会停吗
  • 极简 wordpress建设网站的步骤seo
  • 新建的网站怎么做seo优化中国建设企业银行
  • 大连网站建设选高和科技工程中标公示查询怎么查