C语言的指针

《Const与指针》
遵循靠近谁就修饰谁的原则
1.const int p; //靠近所以修饰指针所指向的值,因而指针指向的值不可以修改。(但是原来变量可以修改,只是不能用*p修改而已)
2.int const *p;//和上面一样。
3.int *const p;//靠近变量本身,所以指针地址不能修改。
4.const int *const p = &a; //这样指针所指向的值和指针地址就都不能修改了(但是好像没什么卵用)
tip:*p表明访问的是指针所指向的值,而p表示指针地址。
《指针加法》
对于一个 char 指针
char *p; //假设地址为 000001;
如果 p + 1那么是等于 000002;
对于一个 int 指针
char *p; //假设地址为 000001;
如果 p + 1那么是等于 000005;
也就是说,+1不是真的+1而是加sizeof(数据类型)大小,一个指针代表一个字节。
《指针减法》
以int为例

int i[10] = {1,2,3,4,5,6,7,8,9,10}
int *p = i;
int *p1 = &i[6];
int cout = p1 - p;//这里的结果是6。

指针的减法是算出两个指针间相隔多少个int大小的空间。
上面哪行 int cout = p1 - p;
也就相当于 int count = (p1 - p) / (sizeof(int)) // 结果等于6
《指针的误用》
本质上指针都是一个内存地址,一个十六进制数。
那么对于
char c = ‘a’; //假设地址为:000001
int *a = &c;
也是能成立的,但是编译器会给出警告,在使用的时候如果 *a = 0,那么就意味着 000001 - 00003的地址每一个字节都要变成0。因为电脑认为你操作的是int数据类型,所以会同时操作4个字节,而不是char的1个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值