美文网首页
指针的运算

指针的运算

作者: 爱生活_更爱挺自己 | 来源:发表于2020-07-02 22:10 被阅读0次

指针的运算

#include<stdio.h>

int main(void)
{
    char ac[] = {0,1,2,3,4,5,6,7,8,9,};
    char *p = ac;
    printf("p =%p\n", p);
    printf("p+1=%p\n", p+1);
    
    int ai[] = {0,1,2,3,4,5,6,7,8,9,};
    int *q = ai;
    printf("q =%p\n", q);
    printf("q+1=%p\n", q+1);
    
    return 0;
}
p =0xbffbad5e
p+1=0xbffbad5f
q =0xbffbad2c
q+1=0xbffbad30

sizeof(char)=1,sizeof(int)=4

#include<stdio.h>

int main(void)
{
    char ac[] = {0,1,2,3,4,5,6,7,8,9,};
    char *p = ac;
    printf("p =%p\n", p);
    printf("p+1=%p\n", p+1);
    printf("*(p+1)=%d\n", *(p+1));
    
    int ai[] = {0,1,2,3,4,5,6,7,8,9,};
    int *q = ai;
    printf("q =%p\n", q);
    printf("q+1=%p\n", q+1);
    printf("*(q+1)=%d\n", *(q+1));
    
    return 0;
}
p =0xbffbad5e
p+1=0xbffbad5f
*(p+1)=1
q =0xbffbad2c
q+1=0xbffbad30
*(q+1)=1

指针的计算

  • 这些算术运算可以随指针做:
    • 给指针加、减一个整数(+,+=,-+)
    • 递增递减(++/--)
    • 两个指针相减
#include<stdio.h>

int main(void)
{
    char ac[] = {0,1,2,3,4,5,6,7,8,9,};
    char *p = ac;
    char *p1 = &ac[5];
    printf("p =%p\n", p);
    printf("p+1=%p\n", p+1);
    printf("*(p+1)=%d\n", *(p+1));
    printf("p1-p=%d\n", p1-p);
    
    int ai[] = {0,1,2,3,4,5,6,7,8,9,};
    int *q = ai;
    int *q1=&ai[6];
    printf("q =%p\n", q);

    printf("q1 =%p\n", q1);
    printf("q1-q=%d\n",q1-q);
    return 0;
}

*p++

  • 取出p所指的那个数据来,完事之后顺便把p移到下一个位置去
  • *的优先级虽然高,但是没有++高
  • 常用语数组类的连续空间操作
  • 在某些CPU上,这可以直接被翻译成一条汇编指令

指针的比较

  • <,<=,==>,>=,!=都可以对指针做
  • 比较他们在内存中的地址
  • 数组中的单元地址肯定是现行递增的

0地址

  • 当然你的内存有0地址,但是0地址通常是不能随便碰的地址

  • 所以你的指针不应该具有0值

  • 因此可以用0地址来表示特殊的事情

    • 返回的指针是无效的
    • 指针没有被真正初始化(先初始化为0)
  • NULL是一个预定定义的符号,表示0地址

    • 有的编译器不愿意你用0来表示0地址

指针的类型

  • 无论指向什么类型,所有的指针的大小都是一样的,因为都是地址
  • 但是指向不同类型的指针是不能互相复制的
  • 这是避免用错指针

指针的类型转换

  • void*表示不知道指向什么东西的指针

    • 计算时与char*相同(但不相通)
  • 指针也可以转换类型

    • int* p = &i;void* q = (void*)p;
  • 这并没有改变p所指的变量的类型,而是让后人用不同的眼光通过p看它所指的变量

    • 我不再当你是int啦,我认为你就是个void!

相关文章

  • C语言的指针(进阶篇章之一)

    指针运算 切记一点就是:指针的运算包括数值和类型。 一、赋值运算 在进行指针的赋值运算时,要注意的是不同类型指针虽...

  • 指针的运算

    指针的运算 sizeof(char)=1,sizeof(int)=4 指针的计算 这些算术运算可以随指针做:给指针...

  • C语言的指针大归纳Three

    【指针的算术运算】 指针运算与普通数值运算不同,先给个例子吧;eg: /* 结合【C语言的指针大归纳Two】的知识...

  • 0基础学习C语言第七章:指针(2)

    C指针的算术运算 C 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++...

  • C初阶5:指针

    1. 指针运算 1.1 算术运算 加减+、-指针与整数相加:表示指针指向下个变量。指针与整数相减:表示指针指向上个...

  • 运算符重载

    一.+号运算符重载 二.<<号运算符重载 三.指针运算符重载(智能指针)

  • 指针(二)

    一、指针的算术运算 指针可以加上或减去一个整数。指针和指针进行加减:两个指针不能进行加法运算,这是非法操作...

  • 嵌入式day07

    指针运算 指针的算术运算: 注意: 不同数据类型的两个指针实际加减整数运算是无意义的 px+n表示的实际位置的地址...

  • iOS 指针(C指针)

    运算符 & 指针变量的定义 指针与数组

  • C/C++指针

    概念一个变量的指针就是该变量的地址,用来存放指针的变量就是指针变量。*指针运算符,也叫间接访问运算符 。&取指针运...

网友评论

      本文标题:指针的运算

      本文链接:https://www.haomeiwen.com/subject/gpmdqktx.html