c语言char怎么用 两个相同类型的指针变量能不能相加,为什么?
两个相同类型的指针变量能不能相加,为什么?
不能直接添加同一类型的两个指针的原因是编译器中不允许此操作。
我不知道我在说什么语言。指针操作是一个相对复杂的类别。花更多的时间在这上面对我们有好处。
1. 所有有效指针都是正整数(0可以用来定义无效指针,小于0的只能称为非法指针)。此值表示内存中的地址。记忆可以理解为一把尺子。上面的刻度是存储器的地址,一毫米的最小刻度可以理解为一个字节)。指针的类型定义仅指示它所指向的地址段中存储的数据类型。假设它是一个4字节的数据,那么指针的值只表示起始位置,下面的4个连续字节或刻度用于存储数据。
2. 添加两个相同类型的指针是没有意义的。例如,P1和P2是int类型的指针。尽管它们指向的内存中有两个int数字N1和N2,但这两个数字可能相邻、相距很远,甚至在同一个位置。假设P1值,即N1位置的起始值为1234,P2为2345。此时,通过直接加法获得的数据3589可能已经超过最大存储器值或者指向无意义的存储器地址,因此指针加法是无意义的。正确的做法是添加N1和N2。
3. 指针可以从立即数中减法、加法或减法,这是有意义和允许的。例如,我想知道N1和N2之间有多少字节的内存。减去它们等于减去尺子上的两个刻度,即长度或宽度。此外,加法和减法和立即数主要用于快速寻址。例如,我有一个起始指针为P0的数组。如果数组中有一系列的int值,那么由2*sizeof(int)得到的值是第三个元素的地址,也是一个指针,这是有意义的(因为int占用的字节数对于不同的语言和系统可能是不同的,因此,我们使用sizeof函数来获得它,而不是直接添加常规的4)。
4. 指针不仅可以指向简单数据,还可以指向复杂数据块或组合类型。简而言之,一个类型的指针的值表示该类型数据在内存中位置的起点。这只是一个天平。指针的特定宽度取决于特定类型。指针操作中最常见的错误是:越界、指针非法、指针指向的数据不是期望的起始位置而是中间位置,指针的值和指针指向的值无法区分。
C语言指针可以相加吗?为什么?
指针变量有加减运算,但要注意以下几点:
1。指针变量存储地址值,即数字地址。例如,指针变量的值是0x20000000,这意味着指针变量将位于0x20000000的内存地址存储在内存中。指针变量可以加减,但只能用整数数据加减。此时,加法或减法的含义不是对其地址值的加法或减法。换句话说,如果指针变量p的值是0x20000000,那么p=p 2的值不是0x20000002,它不是地址值的简单相加,因此地址值的加减多少与指针指向的数据类型有关。如果在32位操作系统上,P是指向整数数据的指针变量,那么在P=p2之后,P的地址值变成0x2000008,也就是说,地址值实际加了多少:sizeof(int)*2。为了说明白点,我们添加和减去的数字是由指针指向的数据类型度量的。p2表示P在内存中向前移动两个int的距离。如果P不是int类型,而是其他类型,则相同。整数数据的指针减法也是如此。
2. 指针可以减,但不能加:可以减去两个相同类型的指针变量。它们的含义表示两个指针指向的内存位置之间分隔了多少个元素(请注意,它是一个元素,而不是字节数)。例如,对于int类型的指针P和P1,P1-P的含义表示它们之间分隔了多少int类型的元素。其他类型的指针变量也是如此。指针变量的自加和自减实际上是整数1的加和减。
3. 大小可以在指针之间进行比较。但是,它也仅限于同一类型的两个指针变量,比较不同类型指针变量的大小是没有意义的。指针之间大小比较的含义表示它们在内存中指向的位置之间的高低关系。
C语言:两个指针变量为啥可以相减,比较,赋值,唯独不能相加呢?请举个例子,谢谢?
比较运算可以得到两个指针的相对位置,加法的结果为零。
例如,总共有100个房间。A住在67街,B住在80街。通过比较和计算,我们可以知道它们之间的距离有多远,但是如果我们使用6780,我们会得到什么呢?
c语言char怎么用 指针可以相加减吗 char和int的用法区别
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。