赞
踩
调试:
明确问题
定位问题--逻辑
//加打印---核心数据打印出来
printf("—--isLeapYear --- %d\n" ,ret);
a.指针----地址----内存单元编号
b.指针----数据类型----指针类型
指针是指一个变量的地址,通过变量的地址″指向″的位置找到变量的值,这种″指向″变量地址可形象地看作″指针″。用来存放指针的变量称为指针变量,它是一种特殊的变量,它存放的是地址值。
不同说法:
定义一个指针?就是定义一个指针变量
打印某个变量的指针?打印的是一个地址
基类型 *变量名
a.基类型:数据类型 基本数据类型 数组类型 指针类型
b.* //定义时侯的*表示定义的是一个指针类型的变量
c.变量名
eg.
int a,b,*p,*q; //
int *p,q; //
1.指针变量的大小:64位(八个字节) 32位(4字节)
2.指针类型----存储的是地址这种特殊数据
指针变量的给值:
int *p; //野指针------值的是随机值----被当做了地址
step1.拿p中的地址 到内存中定位
step2.从定位中开始 偏移基类型大小的一块空间sizeof(基类型)
step3.被当了基类型的变量来看
被调修改主调
修改:
a.修改谁 就传递谁的地址
b. *p(间接访问)
int a[10];
定义类型: int *p=a;
//1.数组本身的特点 (连续性,单一性,有序性)
//2.p+1 --------偏移了一个基类型
通过指针访问到数组元素
*(p+i)<==> int 型的变量 <==> a[i] <==> p[i] <==> *(a+i)
指针运算
&
*
p+1 //指向了下一个基类型数据
p++
p-1
p--
关系运算
> >= < <= == !=
p-q 前提:同一类型的指针才行
p+q:注意:指针不能做加法运算
加上一个结束条件
char s[ ]="hello";
char *p=s; //s 数组名---代表数组首元素的地址
//a[0] ----->类型是char型
//&s[0]----->表示char * 的地址
只要一个变量前用const来修饰,就意味着该变量里的数据只能被访问,而不能被修改,也就是意味着“只读”
const int *p = &a //表示基类型为只读
- int a,b;
- const int* p=&a;
- p=&b; //正确
- *p=2; //错误 该指针p可以再指向其他对象,但是不能修改对象的值;
//可理解为const修饰的是指针指向对象的值;
//const 就近原则 里谁近就限定谁。
int *const p=&a ; //限定p为只读
- int a,b;
- int* const p=&a;
- *p=10;//正确;
- p=&b;//错误,该指针不能改变指向对象,但能修改已指对象的值;
//可理解为const修饰的是指针本身;
const int * const p=&a ; //p不能被修改 指向的目标类型不能被修改
//(不能通过*p来修改)
//既不能修改指向对象,也不能修改已指向对象值;
int puts (const char *s);
{
//const char *s-----在函数里面 并不能通过*s修改到外面的数据
}
1.可以接受字符数组名 //char *
也可以接收字符串常量 //const char *
提高了参数的适用性
2.避免了可能出现的修改的操作 可以将运行时的错误,提前到编译时发现
const char *p可以用来保存字符串常量的地址
1:可以用来修饰变量,修饰函数参数,修饰函数返回值,且被const修饰的东西,都受到强制保护,可以预防其它代码无意识的进行修改,从而提高了程序的健壮性
2:使编译器保护那些不希望被修改的参数,防止无意代码的修改
3:增强代码的可读性
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。