精华内容
下载资源
问答
  • 指针加减运算--void*的加减

    千次阅读 2019-12-07 16:35:38
    大家都知道对于一般的指针,比如int*等,其加减运算是以元素的大小为单位的。 unsigned int *s = (unsigned int*)0x1234; cout << s+1 << endl; cout << s-1 << endl; 其结果分别是:0x...

    大家都知道对于一般的指针,比如int*等,其加减运算是以元素的大小为单位的。

    unsigned int *s = (unsigned int*)0x1234;
    cout << s+1 << endl;
    cout << s-1 << endl;
    

    其结果分别是:0x1238, 0x1230
    分别加减了一个unsigned int的大小,也就是4个字节。

    但是当指针类型为void*时,其加减运算与普通整数没有区别:

    void *s = (void*)0x1234;
    cout << s+1 << endl;
    cout << s-1 << endl;
    

    结果为:0x1235, 0x1233 ,像整数一样,只加减了一。

    出现这种问题,应该是因为void* 类型的指针是一种泛型的指针(可指向任意类型的元素),编译器无法推导出其指向的元素类型,自然也就不能作与类型有关的运算(加或减去一个类型的大小来指向下一个元素)。
    而对于int*类型的指针,编译器知道它是指向int类型数据的,其加减运算就可以int类型数据的大小为单位。


    测试程序:
    在这里插入图片描述

    测试结果:
    在这里插入图片描述
    测试环境为:
    g++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0

    展开全文
  • 指针加减指针与数字( + and - )

    千次阅读 2018-04-07 17:40:28
    今天要记录一个很重要的知识点那就是指针加减一个数和指针加减指针。1、指针 + 一个数 √2、指针 - 一个数 √3、指针 + 指针 ×4、指针 – 指针 √由上图可知,指针加指针是不可行的。1、指针加减数那指针加减一...

    今天要记录一个很重要的知识点那就是指针加减一个数和指针加减指针。

    1、指针 + 一个数     

    2、指针 - 一个数     

    3、指针 + 指针      ×

    4、指针 指针       

    由上图可知,指针加指针是不可行的。

    1、指针加减数

    那指针加减一个数表示什么意思呢,若加的数字为n,则它的意思为加n个单元格,但是他需要调整,调整的权重为sizeof(指针去掉一个*

    练习如下:

    1)加法:

    int *p = (int*)2000;                              答案

         printf("%d\n",p+4);                          //2016

         printf("%d\n",(short *)p+4);                  //2008

         printf("%d\n",(double *)p+4);                //2032

         printf("%d\n",(float **)p+4);                 //2016

         printf("%d\n",(unsigned short*)p+4);        //2008

         printf("%d\n",(long *)p+4);                  //2016

         printf("%d\n",(char *)p+4);                  //2004

         printf("%d\n",(unsigned longlong)p+4);   //2004(并非指针)

    2)减法:

    int *p = (int*)0x2010;                           答案

         printf("%x\n",p-2);                         //2008

         printf("%x\n",(short *)p-2);                 //200c

         printf("%x\n",(unsigned long*)p-2);       //2008

         printf("%x\n",(long long **)p-2);          //2008

         printf("%x\n",(float *)p-2);                //2008

         printf("%x\n",(double *)p-2);              //2000

         printf("%x\n",(char *)p-2);                //200e

         printf("%x\n",(unsigned long)p-2);       //200e

    2、指针-指针

    指针-指针表示的是他们两个指针之间的格子数。我们首先要算出两个指针之间的字节数,再除以调整的权重。

    练习如下:

    intarr[10] = {1};                                  格子数

          int *p = &arr[1];//x+4

          int *q = &arr[9];//x+36

          printf("%d\n",p-q);                             //-8

          printf("%d\n",q-p);                             //8

          printf("%d\n",(short *)q-(short*)p);             //16

          printf("%d\n",(double*)q-(double *)p);          //4

          printf("%d\n",(int ***)q-(int***)p);               //8

          printf("%d\n",(char **)q-(char**)p);              //8

          printf("%d\n",(long)q-(long)p);                  //32

    综上所述,指针的所有算术运算都需要调整,调整的权重为sizeof(指针去掉一个*)

    展开全文
  • 易语言指针加减例子演示
  • 易语言指针加减例程源码
  • 指针加减运算理解

    2018-02-09 23:03:03
    指针间的减法运算就是求指针之间目标个数(数据类型必须相同)int *p;int *q;p-q &lt;==&gt;它内部实现的是:(p的地址-q的地址)/sizeof(int)指针之间加法运算p+q 为错误的,因为加法运算时,如果两个内存...

    指针间的减法运算就是求指针之间目标个数(数据类型必须相同)

    int *p;

    int *q;

    p-q   <==>它内部实现的是:(p的地址-q的地址)/sizeof(int)


    指针之间加法运算p+q  为错误的,因为加法运算时,如果两个内存离得很远,那得到的地址到底是往p下面延伸,还是往q下面延伸呢,所以没意义。

    展开全文
  • c++指针加减运算

    2019-09-25 17:27:38
    c++指针加减运算 1. 给一个指向数组的某个指针加减一个整数n,新得到的还是指针,新指针指向的元素相比之前前进(后退)了n个位置。当然,前提是加减整数的新指针仍需指向同一数组的其他元素,或者指向同一数组的尾...

    c++指针加减运算
    1.
    给一个指向数组的某个指针加减一个整数n,新得到的还是指针,新指针指向的元素相比之前前进(后退)了n个位置。当然,前提是加减整数的新指针仍需指向同一数组的其他元素,或者指向同一数组的尾元素的下一位置。如果计算所得指针超出了上述范围就会产生错误,且这种错误编译器一般发现不了
    2.
    两个指针相减的结果是他们之间的距离,前提是两个指针必须指向同一数组当中的元素。

    int arr[] = {1,2,3,4,5};
    auto n = end(arr) - begin(arr);
    
    

    注意!end与begin为两个标准库函数,返回的是指针,end()返回的是数组尾元素的下一位置指针。两个指针相减的结果的类型是名为ptrdiff_t的标准库类型,和size_t一样是定义在cstddef头文件中的机器相关类型。因为差值可能为负值,所以ptrdiff_t为一种带符号类型。如果两个指针分别指向不相关对象,则不能比较他们!

    int  i = 0;sz = 42;
    int *p = &i,*e = &sz;//未定义的:p与e无关! 比较毫无意义!
    while(p<e)
    

    上述指针运算同样适用空指针和所指对象并非数组的指针。在后一种情况下,两个指针必须指向同一对象或该对象下一位置!。如果p为空指针,则允许给p加上或减去值为0的整型常量表达式。两个空指针也允许彼此相减,结果当然为0.

    展开全文
  • 1、指针加减数字是合法的 指针加减数字表示的意义是指针在数组中位置的移动 指针加减法规则 指针加减法需要调整,调整的权重是指针本身去掉一个*,再求sizeof() eg: int main() { //指针减数字 int *p = ...
  • 摘要:在C语言编程的过程中,我们经常用到多维数组,指针加减运算等等。如果我们想把一个二维数组传递给一个函数,为什么不能用“a[][]”这样的形参模式?而把一维数组传递给函数可以用int a[]这样的形式?内核...
  • c指针加减值得问题

    2015-09-22 10:11:48
    (1)指针加减整数:一度很疑惑数据指针在同种机器和编译器下长度是相同的,但是不同类型指针加上同一个整数之后值却不一样。  int main(void) { int num; char c ; int * a = # char* str= &c; printf...
  • 指针加减操作

    千次阅读 2011-09-10 10:57:43
    int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); cout*(a+1); cout*(ptr-1);   答案: 2 5 分析:  对指针进行1操作,得到的是下一个元素的地
  • 主要给大家介绍了关于C语言中指针加减运算的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 指针变量1,即表示指针变量指向下一个数据元素的首地址。这并不是在原地址值的基础上1。至于真实的地址了多少,要看原来指针指向的数据类型是什么。 真实的地址计算原则上为:指针P+1 = 指针P + sizeof...
  • 考查指针的题目,这道题只适合于那些特别细心且对指针和数组有深入理解的人 main() { int a[5] = {1,2,3,4,5}; int *ptr = (int*)(&a+1); printf("%d %d" , *(a+1),*(ptr-1) ); }   这段程序的输出是: ...
  • 指针加减操作的单位

    2012-03-26 17:07:56
    &+数组名+整形,表示数组首...原因是指针加减操作单位根据指针的类型的来定的 在这里,[&+数组名]指针的类型是数组指针加减操作的一个单位一个该数组的大小(sizeof(数组长度*数组元素类型)) 理所当然,例如int* p
  • C++ 指针加减运算

    万次阅读 2016-05-13 11:41:28
    如果两个指针不是指向同一个数组,对两个指针进行加减或者进行比较是没有任何意义的。 并且两个指针指向同一个数组,两个指针进行加减运算实际上是对数组中的元素进行加减或者比较运算的。 1) 指针变量加/减 一个...
  • 关于二级指针的问题,相对比较麻烦,尤其是关于二级指针的自操作更难理解。
  • 原理是c语言中的指针加减后,会根据指针的类型采用不同的偏移量。   比如, int* a; int* b = a+1; 则 b - a = sizeof(int)   char* a; char* b = a+1; 则b - a = sizeof (char)    ...
  • C++ 指针加减运算

    千次阅读 2017-04-06 09:26:03
    1:涉及到数组的指针,若两指针指向的不是同一个数组,那么指针之间的加减运算是无意义的,因为得到的结果就是他们地址之间的差值。 2:指针变量加/减 一个整数,例如:p++,p--,p+i,p-i,p+-i,p-=i等   C++规定...
  • C语言:指针加减

    2018-07-11 23:52:46
    1、指针+数字: //指针+数字:指针加法需要调整,调整的权重为指针本身去掉一个*号,求sizeof //举例:int *p;p+2的值为p的值加上2*sizeof(int)个字节 指针+数字:需要调整,调整的权重为sizeof(指针只去掉一...
  • C语言指针指针之间的加减运算

    千次阅读 2020-06-05 10:15:14
    (2)指针指针做减法适用的场合:两个指针都指向同一个数组, 相减结果为两个指针之间的元素数目,而不是两个指针之间相差的字节数。 比如:int int_array[4] = {12, 34, 56, 78}; int *p_int1 = &int_array[0...
  • #include #include #include int main(void){ int age[] ={11, 12, 15, 65, 82, 22}; int len = sizeof(age) / sizeof(age[0]); //计算数组总数 int *p = NULL; p = age;... } //指针与整数之间的加减
  • 结构体 c语言 实现多项式加减
  • 参考文章,值得一看 char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf("parr:\n%d\n%d\n%d\...从结果可以看到,字符数组每个元素占1字节,字符指针数组每个占4字节。 ...
  • 关于指针加减操作

    千次阅读 2015-08-19 16:24:06
    原题:main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*... 这里主要是考查关于指针加减操作的理解。 对指针进行加1操作,得到的是下一个元素的地址,而不是原有地址值直接加1
  • 首先看下面这个程序 #include int main() { int a[] = {1,2,3,4,5}; ...指针加减时(如p++)结果主要是由p的类型决定的,在这个例子中a表示一个int[5]型数组,那么&a就表示一个指向数组的指针,
  • 指针加减操作和比较

    千次阅读 2017-04-16 22:59:04
    指针加减的例题代码: #include int main(void) { int a[5] = {1,2,3,4,5} ; int *ptr = (int *)(&a+1) ; printf("%d\n",*(a+1)) ; printf("%d\n",*(ptr-1)) ; return 0 ; }解析:  这里主要...
  • 数据结构作业一,用指针实现加减乘除运算。其实除法很麻烦,可以好好看看

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 107,967
精华内容 43,186
关键字:

指针加减