---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
今天学习了一道内存剖析练习题和复杂数据类型中的数组。
一、内存剖析练习
1.一个函数,将小写字母转化为大写字母
#include <stdio.h>
char upper(char c)
{
/*
//思路:如果是小写字母,准换为大写字母,如果是其他数值,返回它本身
方法一:
if (c>='a' && c<='z') { //确定范围大小
return c - 32; //在ASCII码表中,大小写字母相差32
}else{
return c;
}*/
//方法二:
if (c>='a' && c<='z') {
return c - 32;
}
return c;
}
int main(int argc, const char * argv[])
{
char cc = upper('f');
printf("%c\n",cc);
return 0;
}
二、数组
1.数组的基本使用-定义遍历
#include <stdio.h>
int main(int argc, const char * argv[])
{
//数组的定义格式:类型 数组名[元素个数];
int ages[5] = {19 , 29 , 28 , 27 , 26};
ages[1] = 29;
/*
数组的遍历
ages[0] = 19;
ages[1] = 29;
ages[2] = 28;
ages[3] = 27;
ages[4] = 26;
*/
/*
遍历:按顺序查看数组的每一个元素
*/
for (int i = 0; i < 5; i++) {
printf("ages[%d] = %d\n",i ,ages[i]);
}
// printf("Hello, World!\n");
return 0;
}
2.数组的使用注意
#include <stdio.h>
int main(int argc, const char * argv[])
{
//都是正确写法
// int ages[5] = {10 , 11 , 12 , 67 ,56};
// int ages[5] = {10 , 11};
// int ages[5] = {[3] = 10 , [4] = 11};
// int ages[] = {10 , 11 ,14};
//错误写法
//int ages[];
//错误写法
/*只能在定义的同时进行初始化
int ages[5];
ages = {10 ,11 ,12 ,14};
*/
//错误写法
//如果想在定义数组的同时进行初始化,数组的元素个数必须是常量,或者不写
//int ages[count] = {10 ,11 ,12};
//正确写法
// int ages['A'] = {10 , 11 ,12 ,14 , 16};
// int size = sizeof(ages);
// printf("%d\n",size);
//正确写法
int count = 5;
int ages[count];
ages[0] = 10;
ages[1] = 11;
ages[2] = 12;
for (int i = 0; i < 5; i++) {
printf("ages[%d] = %d\n",i , ages[i]);
}
return 0;
}
3.计算数组的长度
#include <stdio.h>
int main(int argc, const char * argv[])
{
int ages[] = {10 , 11 ,12 ,78};
int count = sizeof(ages)/sizeof(int);
for (int i = 0; i < count; i++) {
printf("age[%d] = %d\n",i ,ages[i]);
}
return 0;
}
4.数组的内存存储细节
#include <stdio.h>
int main(int argc, const char * argv[])
{
/*
char cs[5] = {'a' , 'A' ,'D' , 'e' , 'f'};
printf("%p\n",cs);
for (int i = 0; i < 5; i++) {
printf("cs[%d]的地址是:%p\n",i ,&cs[i]);
}*/
int ages[3] = {10 , 19 ,20};
printf("%p\n",ages);
for (int i = 0; i < 3; i++) {
printf("cs[%d]的地址是:%p\n",i , &ages[i]);
}
return 0;
}
5.数组与函数
#include <stdio.h>
//数组作为函数参数,可以省略元素个数
//数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组
void change(int array[])//数组作为函数参数,可以省略元素个数
{
printf("array==%p\n",array);
array[0] = 100;
}
void change2(int n)
{
n = 900;
}
int main(int argc, const char * argv[])
{
int ages[6] = {10 ,11 ,12 , 12 ,2 ,42};
printf("ages==%p\n",ages);
change(ages);//数组作为函数参数,传递是整个数组的地址
change2(ages[0]);//这里是进行值传递,将ages[0]的值传递给change2
printf("%d\n",ages[0]);
return 0;
}
6.练习:设计一个函数,找出整形数组元素的最大值
#include <stdio.h>
//数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节
int maxOfArray(int array[], int length)
{
// int length = sizeof(array)/sizeof(int);
//1.定义一个变量存储最大值(默认就是首元素)
int max = array[0];
for (int i = 1; i < length; i++)
{
//如果当前元素大于max,就用当前元素覆盖max
if (max < array[i])
{
max = array[i];
}
}
printf("%d\n",max);
return 0;
}
int main(int argc, const char * argv[])
{
int ages[] = {18 ,23 ,54 ,21 ,2 ,452, 2};
maxOfArray(ages, sizeof(ages)/sizeof(int));
return 0;
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------