记中兴软件园一个月实训(二)

/**********************第二天的内容有点多,看官们耐心点看*********************/

指针与变量
1、指针的概念---->指针就是地址
2、指针的类型 是一种逻辑类型不是物理类型
"变量的类型 + *"
3、如何定义指针变量
"类型名 变量名"
变量尺寸占4个字节 4Byte
4、加减运算,解引用运算
加减都是加减绑定的字节数
NOTE:
对于指向变量的指针,加减运算没有意义
对于未知的内存,可读不可写
5、指向变量的指针在实际开发中的应用
扩展局部变量的作用域
通过参数返回值
函数的返回值类型通常为BOOL用于返回函数的执行状态
函数真正的返回值往往通过形参返回
6、几种特殊的指针
空指针 NULL或0 没有指向任何变量不可以解引用
通用指针 void*类型的指针就是通用指针

对通用指针的解释:

 1 char c = 0;
 2 int n = 0;
 3 double d = 0;
 4
 5 void* p = &n;
 6 p = &c;
 7 p = &d;//可以转成许多类型可以指向任意类型 不能解引用
 8 return 0;
 9 //用处在于(double*)malloc(8)函数
10 // 强制转型因为原来是void*

  

7、字符串处理
7.1 存储的问题:字符数组用于存放字符
7.2 字符串的处理:拷贝 连接 大写转小写
截取指定位置后面的子串
删除字符串中指定的值
排序
倒置
数值串转整数串
整数串转数值串
2015/7/7号补充:常量字符串在内存中只有一个拷贝,因此指向同一个字符串的指针,他的地址

是相同的

8、一维数组与指针
定义:类型相同的变量的集合
初始化:
int arr[3] = {1,2,3};
int arr[3] = {1,2};//未赋值的元素全为0
int arr[] = {1,2,3};//长度会根据元素的个数确定

char str[3] = {‘a‘,‘a‘,‘a‘};//不是字符串
char str[3] = {‘a‘,‘a‘};//是字符串
char str[] = {‘a‘,‘a‘};//不是字符串
char str[] = "china";//常用字符串直接赋值
存储:不论是几维数组,变量的内存都是连续的
遍历:从头到尾的对所有变量进行读或写
一维数组的地址关系:
一维数组的数组名是首元素的地址
是一个地址常量

对一维数组与指针的理解:

1 #include <stdio.h>
2 #define ARR_SIZE 3
3 int main()
4 {
5
6 int arr1[] = {1,2,3};
7 int arr2[] = {1,2};
8 int arr3[] = {1,2,3};
9
10 char str1[3] = {‘a‘,‘b‘,‘c‘};
11 char str2[3] = {‘a‘,‘b‘};
12 char str3[] = {‘a‘,‘b‘,‘c‘};
13 char str4[] = "china";
14
15 int i=0;
16 //
17 for(i=0; i<sizeof(arr1)/sizeof(int);i++)
18 {
19 printf("%d ",sizeof(str4));
20 }
21
22
23 int a[ARR_SIZE] = {0};
24 int* p = &a[0];
25 printf("%d,%d,%d\n",&a[0],p,a);
26 printf("%d,%d,%d\n",&a[1],p+1,a+1);
27 printf("%d,%d,%d\n",&a[2],p+2,a+2);
28 }
29 //当 sizeof 运算符应用于类型 char时对象,它提供 1。 当 sizeof 运算符应用于数组时, 它提供总字节数。
30 //需要改变指向的时候用指针 不需要改变指向的时候用引用

传参:三种写法

//貌似只记录了两种

 1 #include <stdio.h>
 2 #define ARR_SIZE 3
 3
 4 //void display(int *p,int len)
 5 void display(int p[],int len)
 6 {
 7     int i=0;
 8     for(i=0; i<len;i++)
 9     {
10         printf("%d",p[i]);
11     }
12
13     for(i=0; i<len;i++)
14     {
15         printf("%d",*(p+i));
16     }
17
18     for(i=0; i<len;i++)
19     {
20         printf("%d",*p++);//相当于*(p++)
21         //但不同于(*p)++,这样也会输出123,因为此时(*p)是内存的标识,相当于一个变量
22     }
23 }
24 int main()
25 {
26     int arr[ARR_SIZE] = {1,2,3};
27     display(arr,ARR_SIZE);
28 }

对(*)以及(&)的理解:

 1 **************************************
 2     int a[4];
 3     &a[0] &a[1] &a[2] &a[3] 4个常量
 4     int* p = &a[0];
 5     p      p+1    p+2   p+3  4
 6     a      a+1    a+2   a+3  4
 7     加*缩加&扩      *&相互抵消
 8     a[0] a[1] a[2] a[3]     4个变量
 9     *p *(p+1) *(p+2) *(p+3) 4
10     *a *(a+1) *(a+2) *(a+3) 4
11 **************************************

**************************************
二维数组与指针
定义:就是一维数组的集合
初始化
int a[2][3] = {{1,2,3},{1,2,3}};//按行全部
int a[2][3] = {{1},{1,2}};//按行部分,未赋值的元素全0
int a[][3] = {{1,2},{1,2},{1}};//按行省略行下标
int a[2][3] = {{1,2,3},{}}//error
NOTE:按行赋初值的时候行括号的个数必须和行下标相同,且行括号内部必须有值

存储:变量的内存是连续的
遍历:用双重循环遍历
变量之间的地址关系:二维数组是由一维数组构成的
所以二维数组名表示第一个一维数组的地址
int a[2][3]
*(*(a+1)+2)---->*(a[1]+2)---->a[1][2]
**************************************
数组的地址就是"数组指针"!
int (*p)[3]//指向长度为3的整形一维数组的指针
char (*p)[100];//指向长度为100的char型的一维数组的指针

char (*p)[120] = NULL;
char a[2][100];
p = a;//error 绑定长度不同 120 != 100

二维数组做函数参数:

 1 #define ROW 2
 2 #define COLUMN 10
 3             //char p[][COLUMN]
 4 void display(char(*p)[COLUMN],int row)
 5 {
 6     int i=0;
 7     int j=0;
 8     for(i=0; i<row; i++)
 9     {
10         puts(p[i]);//首元素的地址给出 p代表一行的首元素地址
11     }
12 }
13
14 int main()
15 {
16     char a[ROW][COLUMN] = {"china","japan"};
17
18     display(a,ROW);
19
20     return 0;
21 }

多维数组与指针
char a[3][4][5];
三维数组是二维数组构成的,所以数组名a表示第一个二维数组的地址,绑定了20个变量
*(*(*(a+1) + 2) + 3)---->a[1][2][3]

char (*p)[4][5] = a;

void display(int (*p)[3][4])
{
}
int main()
{
int a[3][4][5] = {0};
display(a);
}

const与指针
const int var = 0;//常量
100//字面值 存储在常量区
const int* p = &val;//const限定了*p 只能读不能写
int* const p = &val;//const 修饰了p 不能修改指向 必须初始化
内存的访问权限只能缩小不能扩大
const int k = 100;
int* p = &k;//wrong
int k = 0;
const int* p = &k;//Ok

int a = 0;
int& r = a;//引用必须初始化
r = 100;//a的小名 引用占四个字节

数组与指针绑定元素个数:

 1 #include <stdio.h>
 2 #include <string.h>
 3
 4 int main()
 5 {
 6     char src[100] = "china";
 7     printf("%d %d %d",src,&src[0],&src);//src 首元素的地址 绑定的字节数为1
 8                                         //&src[0] 绑定的字节数为1
 9                                         //&src  绑定的字节数为100
10     //扩容 但是存储的还是首元素的地址
11 }

C语言部分库函数实现:

  1 #include <stdio.h>
  2 #include <malloc.h>
  3 #include <windows.h>
  4
  5 char* Strcpy(char* _dest,const char* _source)
  6 {
  7     char* tmp = _dest;
  8     while(*_source)
  9     {
 10         *_dest++ = *_source++;
 11     }
 12     *_dest = ‘\0‘;//容易忘
 13     return tmp;
 14 }
 15
 16 char* Strcat(char* _dest,const char* _source)
 17 {
 18     char* tmp = _dest;
 19     while(*_dest)
 20     {
 21         _dest++;
 22     }
 23
 24     while(*_source)
 25     {
 26         *_dest++ = *_source++;
 27     }
 28     *_dest = ‘\0‘;
 29
 30     return tmp;
 31 }
 32
 33 char* StrUpr(char* pStr)
 34 {
 35     char* tmp = pStr;
 36     while(*pStr)
 37     {
 38         if(*pStr >= ‘a‘ && *pStr <= ‘z‘)
 39         {
 40             *pStr -= 32;
 41         }
 42         *pStr++;
 43     }
 44     return tmp;
 45 }
 46
 47 char* StrLwr(char* pStr)
 48 {
 49     char* tmp = pStr;
 50     while(*pStr)
 51     {
 52         if(*pStr >= ‘A‘ && *pStr <= ‘Z‘)
 53         {
 54             *pStr += 32;
 55         }
 56         *pStr++;
 57     }
 58     return tmp;
 59 }
 60
 61 int StrCmp(const char* _dest,const char* _src)
 62 {
 63     while(*_dest)
 64     {
 65         if(*_dest != *_src)
 66         {
 67             return *_dest - *_src;
 68         }
 69         _dest++;
 70         _src++;
 71     }
 72     return *_dest - *_src;
 73 }
 74
 75 void DelChar(char* str,char ch)
 76 {
 77     /*char* p = (char*)malloc(strlen(str));
 78     while(*str)
 79     {
 80         if(*str != ch)
 81         {
 82             *p++ = *str;
 83         }
 84         str++;
 85     }                还有问题
 86     *p = ‘\0‘;
 87     Strcpy(str,p);
 88     free(p);*/
 89     char *p = str;
 90     while(*str)
 91     {
 92         if(*str != ch)
 93         {
 94             *p++ = *str;
 95         }
 96         str++;
 97     }
 98     *p = ‘\0‘;
 99 }
100
101 void Sort(char (*p)[100],int nCount)//定义一个绑定一维数组的指针
102 {
103     int i=0;
104     int j=0;
105     char tmp[100] = "";
106     for (i = 0; i < nCount-1; i++)//轮数
107     {
108         for (j = 0; j < nCount-i-1; j++)//每一次比较的次数
109         {
110             if(StrCmp(p[j],p[j+1])<0)//large----small
111             {
112                 Strcpy(tmp,p[j]);
113                 Strcpy(p[j],p[j+1]);
114                 Strcpy(p[j+1],tmp);
115             }
116         }
117     }
118 }
119
120
121 #include <string.h>
122 int main()
123 {
124     /*char src[100] = "nnnchnnninannn";
125     char dest[100] = "ci";*/
126     /*Strcpy(dest,src);
127     Strcat(dest,src);
128
129     StrUpr(dest);
130     puts(dest);
131     StrLwr(dest);
132     puts(dest);
133     strcmp(dest,src);*/
134     /*DelChar(src,‘n‘);
135     puts(src);*/
136     char str[100];
137     char* p = str;
138     char arr[3][100] = {"China","Japan","Usa"};
139     Sort(arr,3);
140     puts(*arr);
141     puts(*(arr+1));
142     puts(*(arr+2));
143     return 0;
144 }
时间: 2024-11-12 20:09:21

记中兴软件园一个月实训(二)的相关文章

记中兴软件园一个月实训(一)

马上大四了,在学期末学校一年一度的企业实训体验开始了. 其实现在已经接近尾声,只是把学到的东西整理一下,供各位君闲聊查看. /**********这个是第一天的笔记*************************/ /*一:程序的结构工程 sln文件 .c 文件包括:函数的定义 变量的定义 .h 文件包括:存放声明 类型的定义 宏定义 函数: 主函数 子函数 语句 单词 字母数字下划线 开头不能是数字二:数据类型 --->size 范围分类:1.基本类型整形 有符号 无符号实型 字符型 :un

记中兴软件园一个月实训(三)

前两天只是简单复习了下C语言的基础知识,到第三天就采用项目驱动的方式,带着我们一个班的学生做项目----Popstar游戏 其实还是很倾向于项目驱动的方式来学习的,老师在上边一边讲一边敲代码,我们就只要听,和抄下投影仪上的代码.带着我们走过一遍流程以后,再让我们自己写一个小游戏,老师只提供技术难点帮助. 话不多说,给各位君看看记录的东西. 首先做了一个控制台下的Popstar,用于测试算法的正确性,由于Popstar涉及到选择附近四个方向的同颜色的星星,因此要用到扩展查找算法.因为是学习,老师展

记中兴软件园一个月实训(四)

控制台做完了,剩下的就是贴图了,简单的说. 本着共享源代码的思想,文章结尾我会赋上0.0----1.4版本的代码 (名字为Popstar的为构建完成的代码,名字为*1.0----*1.4的为构建过程代码) 东西有点多,我都不知道从哪点讲起. 创建项目工程的时候选Win32项目 然后看1.0版本,在WinMain中只写了一个函数 1 int WINAPI WinMain(HINSTANCE hInstance, //当前应用程序的实例句柄HANDLE 2 HINSTANCE hPrevInstan

实训二----博客三- 学期总结

本学期期末总结 1:本学期学习内容 本学期共十五章学习内容,课上共学十二章内容,自学两章内容.第一章java入门,这一章学习了Java的由来和安装Java软件.第二章基本数据类型与数组,学习了标识符与关键字,基本数据类型,类型转换运算,输入输出数据和数组.第三章主要学习了运算符与表达式还有If条件分支语句循环语句.第四章和第五章分别学习了类与对象和子类与继承,这两个是很重要的内容,也是我没有学好的内容.第六章接口与实现第七章内部类与异常类.第八章常用实用类,主要是String类date类.第十章

实训二(cocos2dx 2.x 打包apk)

利用cocos2dx编程得到的展现形式之一就是最终的apk,中间的过程只有自己走过才能知道,对于没有章法的初学者,那是相当的头疼, 言归正传,2.x到3.x版本引擎变动很大,除去了CC只是很小一方面,就有很多人不适应,打包apk的方法上也有了很多不同. 本文主要会介绍在windows平台上,利用Cocos2dx 2.x版本引擎打包apk的过程. Cocos2d-x 2.x版本引擎 打包apk 1.环境+工具 VS2013.android-ndk-r9d.android-sdk-windows-r

Java程序设计综合项目实训二——博客三

JAVA学习总结 很快,已经经历了一学期的JAVA编程的学习,但是仔细一想,我所学到的和本应该能得到的一比少之又少:但是起初我并不是这么想的,在C和Python都没有学的很好的前车之鉴下,我本想杀下心好好地去学一学郑老师所教授的JAVA这门编程课程,可能本身对语言之类的学习并不是很感兴趣,导致了在大学中和编程有关的学习中,对知识的掌握都不尽人意.以下是我对本学期的学习结果的一些感悟: 1.态度很重要 在前几次课的时候我还能听进去一些,但是越往后面,听得越少,开始产生一些对JAVA的抵触吧,认为太

实训二(博客一)

博客一: 博客地址:https://www.cnblogs.com/haoyuea/ 码云地址:https://gitee.com/haoyuea/projects 队名:挑战者 口号:一鼓作气,挑战佳绩! 拟作的团队项目:黄金点 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄

18年7月实训unity项目中遇到的问题记录

1.在一个项目中做好的UI做成预置体后在另一个项目中使用时发现无法响应鼠标的输入事件 解决:在使用预置体的项目中添加EventSystem. 2.使用DontDestroyOnLoad()来避免场景切换后GameObject被销毁存在的问题 假如A场景中有一个GameObject名为player,为了不让player在场景切换到B时消失而使用DontDestroyOnLoad(player),这样会导致场景再次切换回A时,A场景中同时出现两个player,并且两个player在场景切换后都不会消

实训二--博客三

经过一个学期的java课程学习,让我有很大收获.了解了这门语言,探索了这门语言,认知了这门语言.从最开始的几行代码到与小组成员编译游戏,感觉学到了很多东西.刚开始学习JAVA的确很不习惯,觉得很累,每周的Java学习与博客园都会占用周末业余时间.但是心态一定要好,反正要做还不如把它做好,不能敷衍自己.万事开头难,习惯成自然!对于任何新生事物,我们首先不要排斥,如果可以,带着兴趣去探索,必定其乐无穷!受益匪浅!这学期也是我第一次接触到博客园.我感觉博客园真的是一个集思广益的地方,大家可以把自己的学