本人工作Android开发越往高深方向专业,就越发现c语言的重要性.可以说java是简单的封装语言,但大量封装起来的不灵活,而Android的自带的java代码往往有些功能并不完美,这就导致高级开发就会自己来做底层功能库.
写一遍博客复习一遍c语言.
学习指针总结,分清指针意思:
提问:int* p和int *p和(int*)p和int **p;以上4种写法有什么区别?
前三种是一个意思,即p是int型指针变量(首先: p是一个指针,其次p指向int型)
最后一种为: p是指向指针的指针(首先: p是一个指针,其次,他指向的类型为int*,也是一个指针,也称二级指针)
记住一点: 指针是与地址操作紧密相关的。如:
int b;
int *p = &b;
p指向b, 实际上是p这个存储单元存储的内容是b存储单元的地址。
就上面的声明,通常来说p意味着指针(跟地址相关),*p为指针所指向的值,是值。所以*p=*b为赋“值”操作,int b=10;*p=b也是赋“值”操作,而如果写成p=b,则两边类型不匹配,编译时就是提示错误,在这做法在PC机端不常用,但嵌入式开发中,经常会用到,此时应做强制类型转换。
再举个栗子:
int *p;
int i=10;
p=&i;
这个时候*p就是10,p就是指向10的指针的值。
--------代码使用理解
#define _CRT_SECURE_NO_WARNINGS //宏定义
//引入头文件
//只有函数的声明,编译时会去找到函数的实现
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
/*
void main(){//基础的hello world输出
printf("hello world\n");
system("pause");
}
*/
//1.基本数据类型
//int short long float double char
/*
int %d
short %d
long %ld
float %f
double %lf
char %c
%x 十六进制
%o 八进制
%s 字符串
*/
/*
void main(){
int i = 1;
float fnum = 23.3; //纯c中声明变量全部放在main函数里
int n = 0;
printf("%d\n",i);
//float fnum = 23.3;//在一些版本上会报错,放在前面
printf("%f\n",fnum);
//基本数据类型所占的字节数
printf("int占%d字节\n",sizeof(int));
printf("char占%d字节\n", sizeof(char));
printf("float占%d字节\n", sizeof(float));
//循环
for (; n < 10; n++){
printf("%d\n",n);
}
//等待输入
system("pause");
}
*/
//2.输入输出函数
/*
void main(){
int i;
printf("请输入一个整数:");
//赋值
scanf("%d",&i); //控制台输入,&取地址符
//打印
printf("i的值为:%d\n",i);
system("pause");
}
*/
//指针
//指针存储的是变量的内存地址
//内存地址,系统给数据分配的编号(门牌号)
/*void main(){
int i = 90;
//指针变量,创建一个int类型的指针
int* p = &i; //p的值就是i这个变量的内存地址
float f = 89.5f;
//创建一个float类型的指针
float *fp = &f;
printf("%#x\n",p);
printf("%#x\n", fp);
system("pause");
}*/
void change(int* p){
*p = 300;
}
//变量名,对内存空间上的一段数据的抽象
void main(){
int i = 90;
//i = 89;
//创建一个int类型的指针
int *p = &i;
//输出地址
printf("p的地址:%#x\n",&p);
printf("i的地址:%#x\n",&i);
printf("i的值为:%d\n", i);
printf("p指针的值为:%d\n", *p);
//间接赋值 i = 200;
//对p存的地址指向的变量进行操作
//*p = 200;
//change(p);
change(&i); // int *p = &i;
printf("i的值为:%d\n",i);
system("pause");
}
/*
void main(){
int time = 600;
printf("time:%#x\n",&time);
while (time > 0){
time--;
printf("游戏时间剩余%d秒\n",time);
//睡眠
Sleep(1000);
}
system("pause");
}
*/
心得:计算机语言的规则其实是差不多的,但是书写语法上有一些特别点和区别,从java上看c,实际上c的指针和特殊写法比较麻烦,所以要想再学习c,实际上就是学会c的特殊点