首页 > 编程语言 >2022-2023-1 20221301 《计算机基础与程序设计》第十二周学习总结

2022-2023-1 20221301 《计算机基础与程序设计》第十二周学习总结

时间:2022-11-20 10:00:31浏览次数:72  
标签:数组 printf char 地址 2022 str 2023 指针 20221301

2022-2023-1 20221301 《计算机基础与程序设计》第十二周学习总结

作业信息

这个作业属于哪个课程 <班级的链接>https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP
这个作业要求在哪里 <作业要求的链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12
这个作业的目标 《C语言程序设计》第11章并完成云班课测试

教材学习内容总结

指针与数组:

  • 指针与一维数组的关系
  • 指针与二维数组的关系
  • 指针数组及其应用
  • 动态数组
  • 常见问题及解决方法

代码调试中的问题和解决过程

  • 问题1:一开始没有太搞明白指针数组的使用格式,对于很多表达是否是相同的并不能明确。
  • 问题1解决方法:通过上网查找,并阅读教材,自己敲规范的代码,并加以理解。
    int a[3][4];
    a;//代表数组首行地址,一般用a[0][0]的地址表示
    &a;//代表整个数组的地址,一般用a[0][0]地址表示
    a[i];代表了第i行起始元素的地址(网上说是代表了第i行的地址,但我觉得不是,在讲数组与指针的关系时我会验证给大家看)
    &a[i];代表了第i行的地址,一般用a[i][0]的地址表示
    a[i]+j;//代表了第i行第j个元素地址,a[i]就是j==0的情况
    a[i][j];//代表了第i行第j个元素
    &a[i][j];//代表了第i行第j个元素的地址

include <stdio.h>

int main()
{
int* p;//定义了一个指向整形数据的指针变量
char p;//定义了一个指向字符型数据的指针变量
char (
p)[3];//定义了一个数组指针,指向了一个长度为3的一维字符数组
char* (p)[3];//定义了一个数组指针,指向了一个二维数组
//注意 char
p[3];不是一个指针,它是一个数组,里面存放了指针,下面我们会详细讲解
return 0;
}

  • 问题2:没有搞明白字符串该如何用指针数组表示。
  • 问题2解决办法:

include <stdio.h>

int main(void)
{
char str[] = {"abg","cd"};//单独拿出来,指的是数组里的内容是型的,str的类型是char []型
printf("%c\n",
(
(str+1)+1));//d
printf("%c\n",**str);//a
printf("%s\n",str+1);//bg
printf("%s\n",
(str+1));//cd,
printf("%s\n",str[0]);//abg
printf("%p\n",&str);//数组整体的收地址,大小同下行代码的值
printf("%p\n",str);//数组的首地址,即存放内容——字符串"abg"的地址,并非'a'的地址
return 0;
}

传参问题:

include <stdio.h>

char **String(char *str[])
{
str[0] = "aa";
str[1] = "bb";
return str;
}

//返回str[]时,因为[]是下标运算符号,可以当作,所以返回值类新为char **

int main(void)
{
char **p;
char str[2];
p = String(str);
printf("%s\n",
p);
printf("%s\n",*(p+1));
return 0;
}
参考:https://blog.csdn.net/LZANDLC/article/details/81872925

  • 问题3:没搞清楚二维数组应该怎么和指针结合使用。
  • 问题3解决方法:

include <stdio.h>

int main()
{
int (p)[3];
/
定义了一个数组指针,指向了一个数组长度为3的一维数组,注意是指向一个数组,所以赋值给他的地址要是数组类型的地址
可以这样理解:一维数组名就是一个指针这里只是用指针的形
式代替了数组名 ,注意这里的3要和指向的数组长度相同
*/

int a[3] = {1,2,3};
p = &a;
/*
将数组a地址赋值给p,此时(*p)[i]相当于a[i],注意不能写成p=a,或者p=&a[0]
因为指针p是指向一个数组,p=a表示p指向首个元素的地址,虽然&a,&a[0],a
的结果是一样的(这是因为数组一般用其首元素地址表示) 
*/

printf("数组指针指向一维数组的遍历:\n"); 
for(int i=0; i<3; i++)
{
	printf("%d\n",(*p)[i]);
}

/*这里要用指针遍历输出a不能用*(p+i)方式输出,
  因为p表示数组a的地址(一般用数组中首个元素地址表示), 
  p++表示p要增加3*4个字节长度(3为数组指针指定的长度,4为int所占空间大小)  
*/ 

printf("--------------------------\n");
printf("&a=%d\n",&a);//输出a的地址 
printf("p=%d\n",p);//p指向了数组a,所以输出为a的地址(一般用数组中首个元素地址表示)
printf("*p=%d\n",*p);//既然p指向了数组a,那么*p则为数组a本身(一般用数组中首个元素地址表示)
printf("p+1=%d\n",p+1);
printf("*(p+1)=%d\n",*(p+1));//,运用公式*(p+1) == p[1],可以想象成刚好超过a长度的那个地址,p+1表示p要增加3*4个字节长度(3为数组指针指定的长度,4为int所占空间大小)==*(p+1)
printf("**p=%d\n",**p);//p指向a,*p表示a本身(一般用数组中首个元素地址表示),那么**p表示*a,表示数组首元素。
printf("p[0]=%d\n",p[0]);//p[0] == *p ,*p又是a本身,所以输出a首元素地址
printf("*p[0]=%d\n",*p[0]);//既然p[0]为数组首元素地址,那加上个*就为a的首元素 
return 0;

}
参考:https://blog.csdn.net/qq_43428547/article/details/88956911

其他(感悟、思考等,可选)

最近学习了数组指针,发现虽然能理解,但是不太会用,包括之前学到的函数的调用等,还是要多通过做题尽可能熟练度掌握,不能落下!!对于一些不同的指针表达,还有使用的规范还是需要多加注意,可以通过抄书上的代码先有大体印象,注意哪里应该用“:”,哪里应该用“{}”等,加强自己的规范性后,多练题提高熟悉度。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 0/0 3/3
第二周 200/200 6/6 18/21
第三周 200/400 10/10 10/31
第四周 300/700 2/12 19/50
第五周 300/1000 3/15 20/70
第六周 300/1300 5/20 15/85
第七周 900/2200 1/21 15/100
第八周 1400/3600 5/25 15/115
第九周 1500/5100 3/27 15/130
第十周 1400/6500 1/28 15/145
第十一周 1500/8000 1/29 15/160
第十二周 1500/9500 1/30 15/175

参考资料

标签:数组,printf,char,地址,2022,str,2023,指针,20221301
From: https://www.cnblogs.com/bky20221301/p/16907927.html

相关文章

  • visual studio2022 使用SonarLint插件
    1.什么是SonarLint插件SonarLint是一个免费的开源IDE扩展,它可以识别并帮助您在编写代码时解决代码质量和代码安全问题。SonarLint类似于拼写检查器,它可以发现一些常见的编......
  • 【日总结】2022.11.20
    持续更新做了多少东西就放多少东西)次小质因子前缀和【UR#13】Sanrd设\(f(x)\)为\(x\)的次大质因子,若\(x\)为质数或\(1\)则\(f(x)=0\),求\(f(x)\)的前缀和。......
  • 2022NOIP A层联测30 分配 串串超人 多米诺游戏 大师
    T1[数论/贪心构造]给出n-1对限制形如(i,j,a,b),要求\(xi/xj=a/b\),xi和xj都是正整数。求长度是n的序列x,满足条件(保证给定条件和任意一个数可以唯一确定这个序列)的\(min(\su......
  • 感悟-20221119
    生活中总有一盏灯照亮前行的路;总有一些品质让内心满怀憧憬;总有一些信仰让灵魂有栖息之所。人生最好的风景,竟是内心的淡定与从容。 ......
  • 2022-11-19学习内容-Server端代码编写-Client端代码编写
    1.Server端代码编写1.1UserDBHelper.javapackagecom.example.chapter07_server.database;importandroid.content.Context;importandroid.database.sqlite.SQLiteD......
  • 2022.47 AI中的算法与模型
    最近工作中,发现不少人对AI中的算法和模型的概念分不清楚,导致思考沟通表达问题不准确,其实这两个概念还是有很大差别的。AI中的算法,是指在已知样本数据基础上,按照预先设定的......
  • 2022.11.19
    ###noip模拟又炸了。。。。。。##出错点t1:又假了,问题是自己知道假了还没想着写暴力##过程分析半小时通读完先开得t2,因为有个点没转化过来,打了个多一个二分log的......
  • 散乱的思绪-2022.11.19
    我是一个什么都想要,梦想着一步登天的妄想者。我没有一颗聪明绝顶的脑袋,也没有出众样貌,更没有父母的日复一日劳作的毅力。有时候我在想,我是一个什么样的人呢?在我看来我大概......
  • #yyds干货盘点#【愚公系列】2022年11月 微信小程序-多人音视频对话
    前言微信小程序开发多人音视频对话首先得去小程序管理后台,「开发」-「接口设置」中自助开通该组件权限。相关属性:一级类目/主体类型二级类目小程序内容场景教......
  • CSP-J 2022游记
    本文章同步发布于洛谷博客初赛初赛-90天从今年暑假开始学习。教练说我很有天赋,所以暑假直接跟着入门班上。整个暑假就是在持续学基础知识,最后几周开始刷前几年的复......