精华内容
下载资源
问答
  • 一、几种常见的const修饰指针 1、指针所指之物,不能改变 const int *p=&a; int const*p =&a; /*以上两种写法其实都是一样的,const在*p左边,表示*p不能改变 即不能给*p再进行赋值*/ ex://*p=100;错误 //p...

    一、几种常见的const修饰指针
    1、指针所指之物,不能改变

    const int *p=&a;
    int const*p =&a;
    /*以上两种写法其实都是一样的,const在*p左边,表示*p不能改变
    即不能给*p再进行赋值*/
    ex://*p=100;错误
    //p=&b;正确
    

    2、指针本身不能改变

    int *const p=&a;
    /*const 在指针p的坐边,则指针本身不能进行改变,即不能给p进行赋值*/
    ex://p=&b;错误
    //*p=100;正确
    

    二、指针加减
    1、指针加整数(1、、、)
    2、指针相加没有意义
    因为即使两个相同的变量连续存储,但如果相加的话,不知道会跳向哪里,指向的值很有可能是随机值,所以没有意义。
    3、指针相减
    遵循原则算头不算尾
    int类型的指针减去int类型的指针,得到的是int类型的元素个数。同理,char、、、、
    在这里插入图片描述

    展开全文
  • 在c语言中指针是内存单元的编号,通过编号就可以准确找到内存中相应的位置,所以指针也是地址。 指针本身也是一个变量,它存放的是某个变量的地址,它本身也是存在地址的,而指针本身也是一个变量,它所存放的是...

    地址本身是由32根引脚输入高低电位(高电位1,低电位0),地址本应该是由32位0或1组成,但这样太长了,所地址用十六进制来表示。

    1:什么是 指针

        在c语言中指针是内存单元的编号,通过编号就可以准确找到内存中相应的位置,所以指针也是地址。

        指针本身也是一个变量,它存放的是某个变量的地址,它本身也是存在地址的,而指针本身也是一个变量,它所存放的是一个地址(比如0X00121212)是一个整型,所以指针变量本身是一个int类型,占据内存4个bit。

    2 :指针的类型的影响

         在c语言只,指针可以是int*(整型指针),char*(字符指针)等等,它的类型取决于它所指变量的类型。

        而不同类型的指针在进行指针运算的时候,过程是不同的,不同指针在解引用 一次能访问的字节不同(指针的权限不同),指针类型决定指针向前和向后最小单位能走多远的距离。

    int* -->一次访问4个字节

    char* -->一次访问1个字节

    double* -->一次访问8个字节

     地址内数据是将二进制转化为十六进制,da。

    不同类型的 指针所占内存大小一样;

    指针的加减运算

    * 解引用操作符

    在解引用之前,a中的值为11223344, 但是当*pa=0运行后,全都变成0了;int* 一次改变了4个字节的数据;

    但是当指针类型为char时,*pc-0只能改变一个字节,因为char本身只有一个字节。

    运算

    整型指针加1,和字符指针加1,整型增加4,字符增加2;

    创建一个整型数组

    在数组中依次放入0 1 2 3 4 5 7 8 9,int* p=arr,数组名本身自带&符号,

    这个是将arr数组内第一个元素的地址存放在int* p中,

    *p 解引用后,相当于通过地址找到了数组的第一个元素,*p本身就等于arr数组的第一个元素。

    &a[9-&a[0] 

    两个指向同一块空间的指针才能进行减法,减法得到两个地址之间的元素个数;

    展开全文
  • 指针变量的加减运算

    2021-09-09 15:41:58
    指针变量可以加减,但是只能与整型数据加减。此时加减的含义并不是其地址值进行了加减,而是与指针指向的数据类型相关联。如果指针变量 p 的值是0x20000000,那么 p=p+2 的值并不是 0x20000002,如果在 32 位的操作...
    1. 指针变量可以加减,但是只能与整型数据加减。此时加减的含义并不是其地址值进行了加减,而是与指针指向的数据类型相关联。如果指针变量 p 的值是0x20000000,那么 p=p+2 的值并不是 0x20000002,如果在 32 位的操作系统上,p 是指向整型数据的指针变量,那么 p=p+2 之后,p 的地址值变成 0x20000008,也就说地址值加了: sizeof(int)*2。加减的数字是以指针指向的数据类型为量度的,p+2 表示 p 在内存中前移两个int的距离,如果 p 不是 int 类型,其他类型道理也是一样。同样指针与整型数据相减也是同样的道理。指针变量的自加和自减实际上是与整数 1 的加减运算。

    2. 指针之间可以相减,但不可以相加。两个指针变量(同一类型)相减表示两个指针指向的内存位置之间相隔多少个元素(不是字节数),例如对于 int 类型的指针 p1 和 p2, p1-p2 的意义表示他们之间相隔多少个 int 类型的元素。同样对于其他类型的指针变量之间相减的意义也是一样。

    3. 指针之间可以比较大小。但是同样也限于两个相同类型的指针变量,不同类型的指针变量之间比较大小没有任何意义。指针之间的大小比较的意义,表示在内存中他们指向的位置的高低关系。

    展开全文
  • 关于C++指针减法

    2021-02-12 14:14:24
    例如指针指向int,那么加减都以4个字节为单位,如果指向char,那么加减都以1个字节为单位,下面是测试代码及运行结果的截图。可见整型指针地址增加了4,字符型指针地址增加了1 2、打印字符指针的地址时,如果也直接...

    CSAPP第三章看到3.8了,这一节在讲关于数据的表示,其中提到了指针的运算,本来自己只是想实践一下加深点印象,没想到小小的测试程序还又学到了一些新知识,觉得有必要记录一下:
    1、首先是正题,关于指针的加减法,所得结果与指针所指的类型有关。例如指针指向int,那么加减都以4个字节为单位,如果指向char,那么加减都以1个字节为单位,下面是测试代码及运行结果的截图。可见整型指针地址增加了4,字符型指针地址增加了1
    在这里插入图片描述
    2、打印字符指针的地址时,如果也直接使用cout << b会打印出a和空字符,因为C++重载了>>会直接打印出字符串的值而不是地址,想要打印出指针的地址需要使用static_cast<void*>从而避免重载
    3、这里使用delete时要注意,由于此时两个指针都已经没有指向内存了,所以需要将地址减一才能正确释放内存,否则会crash

    展开全文
  • 将指向double的指针加1后,如果系统对double使用8字节存储,则数值增加8字节。 下面的例子展示了指针、数组和指针算数。指针和指针都可以通过指针和数组的方式获取数组的值。 #include <iostream> int main()...
  • C语言编程的精髓就是对指针的精巧使用,利用指针变量可以表示各种类型的数据结构,并能想汇编语言一样处理内存地址, 可以编出精炼而高效的程序。指针极大的丰富了C语言的功能。 指针变量的大小 指针变量的值就是...
  • 10.指针变量加减运算

    2021-10-20 11:37:14
    1.指针变量数据类型的作用? 1.1指针变量在32位操作系统占用4个字节,在64位操作系统中占8个字节 指针变量占用的内存大小和指针变量的数据类型无关 1.2指针变量的数据类型是专门用于告诉操作系统,在访问指向...
  • C语言指针加减和大小

    2021-11-07 10:04:03
    指针存放的是地址,p=p+2,加减的数字是以指针指向的数据类型为量度的。比如 int a[10]; int *p=a; //p初始指向a的首元素地址,p+1即指向第二个元素 int a[2][3]; int *p=a; p=p+1; //p初始指向a的首行地址,p+1...
  • C语言--指针加减

    2021-10-30 14:00:06
    指针加减一个整数 指针变量的大小都是四个字节,指针加1,是加了一个指针所指向类型的大小,不是加指针变量的大小。 #include <stdio.h> int main() { int m = 0; int *p; p=&m; printf("%p%p",p,p+1);//p...
  • 例子1:#include int main(){float arr[5] = {12.5, 10.0, 13.5, 90.5, 0.5};float *ptr1 = &arr[0]; //ptr1 is 925601136float *ptr2 = ptr1 + 3;// ptr2 is 925601148printf("%f ", *ptr2);...
  • c指针加减

    2021-08-24 17:18:40
    指针加减(p++ & p--) 如果ptr 指向位置为 1000 的 【整数】,ptr 每增加1,它都将指向下一个【整数】位置,即当前位置往后移 4 字节,指向【 1004】 位置。 如果 ptr 指向一个地址为 1000 的【字符】,ptr 每...
  • char arr[3];printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2);char *parr[3];...从结果可以看到,字符数组每个元素占1字节,字符指针数组每个占4字节。再看一个例子:char a = 'a', b = 'b', c ...
  • char arr[3];printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2);char *parr[3];...从结果可以看到,字符数组每个元素占1字节,字符指针数组每个占4字节。再看一个例子:char a = 'a', b = 'b', c ...
  • C语言指针与自增自运算解析C语言是面向过程的程序设计语言,自上世纪七十年代提出,以其特有的魅力经久不衰,现在仍然广泛应用在不同的开(本文共1页)阅读全文>>一、背景介绍尽管大多数学生接触过钟表,有些学生...
  • 26. 指针运算符加减

    2020-12-30 14:24:10
    通过如下方式,访问指针定义范围以外的内容,指针越界 root@wesley-VirtualBox:/home/wesley/C_coding/20201130# cat pointer.c #include <stdio.h> int main() { const int a = 0x12345678; int b = 0x...
  • 函数指针:本质上是一个指针,只不过指向函数而已 编译器在编译期间对函数开辟了一块空间,而这快空间的开始地址,就是它的函数指针 int Max(int a, int b) { return a>b?a:b; } int Add(int a, int b) { ...
  • 1、指针自增在程序中使用指针代替数组,因为变量指针可以自增,而数组不能自增,数组可以看成一个指针常量。以便顺序访问数组中的每一个元素。例如,#include const int MAX = 3;int main (){int var[] = {10, 50, ...
  • 例如: 16位编译器 char :1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: 4个字节 double: 8个字节 long: 4个字节 long long: 8个字节 unsigned long: 4个...
  • typedef int (*fptrOperation)(int,int); int add(int num1, int num2) { return num1 + num2; } int subtract(int num1, int num2) ... return num1 - num2;...int compute(fptrOperation operation, int num1, int...
  • 原理是c语言中的指针加减后,会根据指针的类型采用不同的偏移量。 比如, int* a; int* b = a+1; 则 b - a = sizeof(int) char* a; char* b = a+1; 则b - a = sizeof (char) 将上述程序改写如下,更容易...
  • 指针其实也是一个数据类型,它的值是一个数字,表示的是一个地址比如说:00000000 00001000 0000000000010000,对32位的计算机系统,那么指针应该也是4个字节,即有32位表示有2^32个地址,即可以遍历4g的内存空间。...
  • #include <stdio.h> int main(int argc, char const *argv[]) { int buf[10] = {1,2,4,5,6,2}; int *p = buf; printf("p存放的地址为:%p\n",p); p = p + 1; printf("p存放的地址为:%p\n",p );...q
  • 用双指针去做循环的时候,什么时候该把指针加一,何时该一,实在是令人头秃。 今天分享一个简单的小技巧——枚举法。 举个例子: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的...
  • 解答:程序输出: 2,5分析:这里主要是考查关于指针加减操作的理解。对指针进行加1操作,得到的是下一个元素的地址,而不是原有地址值直接加1。所以,一个类型为 T 的指针的移动,以 sizeof(T) 为...
  • c:结构体指针加减法

    2021-09-30 11:02:19
    gcc 编译器会根据指针类型对绝对地址做右移操作,返回就是实际的元素个数。 [root@vmtca-2003 test]# cat struct.c #include <stdio.h> #include <string.h> typedef struct test { int a; int b; } ...
  • 1. 指针的算术运算简介:
  • #include "stdio.h" typedef int (*operation)(int, int); operation operations[128] = {NULL}; //you can also use " int (*operations[128])(int, int) = {NULL}; " typedef int (*fptrOperation)(int,int);...
  • 今天遇到一个自己特别蠢的问题,在指针加减的时候赋值崩溃了,而且是随机的。后来后知后觉,发现是new的内存,不能直接去操作加减指针,需要用下标的方式去处理赋值,但是栈上面的内存是可以直接加减操作指针的。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,271
精华内容 45,708
关键字:

指针可以加减吗