c语言学习02指针总结

    本人工作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的特殊点




猜你喜欢

转载自blog.csdn.net/insist_hui/article/details/79395974