指针运算
【摘要】 利用*p++遍历数组,0地址的知识点,指针的类型。
*p++
- 取出p所指的那个数据来,完事之后顺便把p移到下一个位置去
- *的优先级虽然高,但是没有++高
- 常用于数组类的连续空间操作
- 在某些CPU上,这可以直接被翻译成一条汇编指令,会跑的比较快
循环遍历一个数组
#include <stdio.h>
int main(void) {
char ac[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,};
char *p = &ac[0];
int i;
for (i = 0; i < sizeof(ac) / sizeof(ac[0]); i++) {
printf("%d\n", ac[i]);
}
int ai[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,};
int *q = ai;
return 0;
}
用指针遍历数组
在数组里放入一个特数值,比如说-1。
#include <stdio.h>
int main(void) {
char ac[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1};
char *p = &ac[0];
int i;
for (p = ac; *p != -1; p++) {
printf("%d\n", *p);
}
int ai[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,};
int *q = ai;
return 0;
}
用while控制循环
#include <stdio.h>
int main(void) {
char ac[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1};
char *p = &ac[0];
int i;
while (*p != -1) {
printf("%d\n", *p++);
}
int ai[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,};
int *q = ai;
return 0;
}
个人感觉用while写代码看起来更简练一些,而且逻辑上也没有for那么复杂
指针比较
- 指针不做乘除,因为指针做乘除没有意义
- <,<=,==,>,>=,!=都可以对指针做
- 比较它们在内存中的地址
- 数组中的单元的地址肯定是线性递增的
0地址
- 当然你的内存中有0地址,但是0地址通常是个不能随便碰的地址
- 所以你的指针不应该具有0值
- 因此可以用0地址来表示特殊的事情:
- 返回的指针是无效的
- 指针没有被真正初始化(先初始化为0)
- NULL是一个预定定义的符号,表示0地址
- 有的编译器不愿意你用0表示0地址
- 以后最好用NULL表示0地址,虽然在有的编译器他们两个可能不相等
指针的类型
- 无论指向什么类型,所有的指针的大小都是一样的,因为都是地址
- 但是指向不同类型的指针是不能直接互相赋值的
- 这是为了避免用错指针
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)