前序:
int i = 99;
do {
printf("%d\n",i);
if (i % 5 == 0) {
printf("found one!\n");
}
i = i-3;
} while (i >=0);
当然你也可以用其他循环方法哦。
本节导图如下:
地址与指针基本操作
int main(int argc, const char * argv[]) {
// insert code here...
int i = 10;
printf("i 的地址是 %p\n",&i);//获取整形i的地址。
int j = 19;
int *k = &j;
printf("获取k的地址是 %p\n",k);//地址
printf("获取k的值是 %d\n",*k);//内容 使用*运算符 可以访问保存在这个地址中的数据
printf("获取k的值是 %p\n",&k);//地址
*k = 100;
printf("修改后的k的内容是%d\n",*k);
//通过sizeof来获取某个数据类型的大小
printf("整型数据的大小的是%zu\n",sizeof(k));//如果是 int 结果是 4 32位 如果是指针 结果是 8 64位
return EXIT_SUCCESS;
}
指针声明的代码规范
int main(int argc, const char * argv[]) {
// insert code here...
float *a;//定义一个浮点类型的变量a
// float* a;//这样写也没有问题,但是风格不好。
float* powerPtrA,powerPtrB;//C语言允许一行代码中声明多个变量。但是这样一写,powerPtrA就是一个float类型的指针,而powerPtrB却是一个float类型的变量。如果要为这两个变量都声明成指针,那需要如下分别加上*运算符。
float *c, *b;//c、b都是指向float类型的指针
return EXIT_SUCCESS;
}
所以,养成一个良好的编码习惯,还是很重要的哦!
引用传递
#include <math.h>
int main(int argc, const char * argv[]) {
// insert code here...
double pi = 3.14;
//可以通过modf()函数将传入的double类型的数据 得到浮点数的整数部分和小数部分。
double intergerPart;
double fractionPart;
fractionPart = modf(pi, &intergerPart);//将intergerPart的地址传入作为实参
//获取intergerPart地址上的值
printf("intergerPart的值 = %0.f, fractionPart的值是 = %.2f\n",intergerPart,fractionPart); //结果是:3 3.14
return EXIT_SUCCESS;
}
结构
////声明一个结构体
//struct Person {
// float heightInMeters;//身高
// int weightInKilos;//体重
//};
//上面的可以替换成如下写法
typedef struct{
float heightInMeters;
int weightInKilos;
}Person;
int main(int argc, const char * argv[]) {
// insert code here...
// struct Person wyy;
Person wyy;
wyy.heightInMeters = 160;
wyy.weightInKilos = 96;
// struct Person jack;
Person jack;
jack.heightInMeters = 170;
jack.weightInKilos = 130;
printf("wyy is %.2f meters tall\n",wyy.heightInMeters);
printf("wyy weighs %d kilograms\n",wyy.weightInKilos);
printf("jack is %.2f meters tall\n",jack.heightInMeters);
printf("jack weighs %d kilograms\n",jack.weightInKilos);
return EXIT_SUCCESS;
}
堆
之前的代码都是栈中的内存,这类内存空间会在调用函数时由系统自动分配,并在函数结束后自动释放。
-----栈
仅有自动变量是不够的,有时候还是需要一块连续的空间来存储变量。-----堆
分配缓冲区的方法是通过malloc:
//声明一个指针变量
float *startOfBuffer;
//从堆分配指定字节数的内存
startOfBuffer = malloc(1000*sizeof(float));
//使用缓冲区
//.....
//释放之前分配到的内存,使之能够呗重新使用
free(startOfBuffer);
//将指针变量赋值为空
startOfBuffer = NULL;
小练习。
1.试编写程序,显示float类型的数会占用多少内存。
2.mac上的short是两个字节的整数,其中的一个位会被用来保存符合(正或负)。试回答short能够保存的最小数和最大数。unsigned short只能保存无符号整数,试回答unsigned short能够保存的最大数。
记得回答问题有可能得到红包哦。