本文主要是介绍c语言指针加减法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- c语言指针加减法
- 解析
- 参考-整数类型
- 参考-资料
c语言指针加减法
下面代码会输出什么()
int main(int argc, char **argv)
{int a[4] = {1, 2, 3, 4};int *ptr = (int *)(&a + 1);printf("%d", *(ptr - 1));
}
选项有1,2,3,4。
解析
答案为4。我们打印一下内存地址
void test7() {int a[4] = { 1, 2, 3, 4 };printf("a = %p\n\n", a);int* ptr = (int*)(&a + 1);printf("ptr = %p\n", ptr);printf("ptr+1 = %p\n", ptr+1);printf("ptr+2 = %p\n\n", ptr+2);printf("*(ptr - 1) = %d\n", *(ptr - 1));printf("*(ptr - 2) = %d\n", *(ptr - 2));
}
输出
a = 00BAF800ptr = 00BAF810
ptr+1 = 00BAF814
ptr+2 = 00BAF818*(ptr - 1) = 4
*(ptr - 2) = 3
这里的00BAF800
为16进制数,所以00BAF810
比00BAF800
多了一个10
,意思就是16进一,所以&a + 1
其实是走了16步(这里十进制里的16步哦)。
ptr
的内存地址为00BAF810
,ptr+1
的内存地址为00BAF814
,走了4步(这里十进制里的4步哦)。为什么走了四步?因为int类型为4字节。
参考-整数类型
下表列出了关于标准整数类型的存储大小和值范围的细节:
类型 | 存储大小 | 值范围 |
---|---|---|
char | 1 字节 | -128 到 127 或 0 到 255 |
unsigned char | 1 字节 | 0 到 255 |
signed char | 1 字节 | -128 到 127 |
int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 字节 | -32,768 到 32,767 |
unsigned short | 2 字节 | 0 到 65,535 |
long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 字节 | 0 到 4,294,967,295 |
注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
以下列出了32位系统与64位系统的存储大小的差别(windows 相同):
可以看到int类型
为4字节。
为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。下面的实例演示了获取 int 类型的大小:
#include <stdio.h>
#include <limits.h>int main()
{printf("int 存储大小 : %lu \n", sizeof(int));return 0;
}
参考-资料
C 数据类型
C语言指针变量的运算(加法、减法和比较运算)
这篇关于c语言指针加减法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!