如果字节内存地址不是int类型的,int类型的C指针如何保存内存地址?
我正在看一个答案,对示例如果字节内存地址不是int类型的,int类型的C指针如何保存内存地址?,c,pointers,C,Pointers,我正在看一个答案,对示例int*p2=&I(来自丹·奥尔森的回答) i的地址不是int,它类似于0x02304,对吗?那么,我们如何将其放入p2?如果字节内存地址不是int类型的,int类型的C指针如何保存内存地址 谢谢 另外,对于任何对此感到困惑的人,我发现另一条线索很有帮助(尽管它没有回答我的问题),那就是好运 i的地址不是int,它类似于0x02304,对吗 指针是保存内存地址的变量。地址,就像你家的地址一样,是分配给内存字节位置的整数 int类型的C指针如何保存内存地址 在您的示例中,p
int*p2=&I代码>(来自丹·奥尔森的回答)
i
的地址不是int,它类似于0x02304,对吗?那么,我们如何将其放入p2
?如果字节内存地址不是int类型的,int类型的C指针如何保存内存地址
谢谢
另外,对于任何对此感到困惑的人,我发现另一条线索很有帮助(尽管它没有回答我的问题),那就是好运
i的地址不是int,它类似于0x02304,对吗
指针是保存内存地址的变量。地址,就像你家的地址一样,是分配给内存字节位置的整数
int类型的C指针如何保存内存地址
在您的示例中,p2
是类型为pointer-to-int的变量。它是一个指针—一个内存地址—您正在声明指向存储int
变量的内存点
i的地址不是int,它类似于0x02304,对吗
指针是保存内存地址的变量。地址,就像你家的地址一样,是分配给内存字节位置的整数
int类型的C指针如何保存内存地址
在您的示例中,p2
是pointer-to-int类型的变量。它是一个指针—一个内存地址—您正在声明指向内存的点,其中存储了int
变量。p2
不是int
,它是指向int
的指针。因此,它可以保存int
变量的地址
语法int*p2代码>定义指向int
的指针
用&i
初始化p2
将变量i
的地址存储到p2
中。修改由p2
指向的值将修改i
的值
以下可选语法都是等效的:
int *p2 = &i;
int * p2 = & i;
int * p2 =& i;
int*p2=&i;
int* p2 = &i;
首选语法是int*p2=&i代码>因为它避免了在同一行上定义多个变量时的常见误解:
int *p1, *p2; // defines 2 pointers to int
int *p1, p2; // p1 is a pointer-to-int, whereas p2 is an int
将*
添加到类型会使后一种定义非常混乱:
int* p1, p2; // p1 is a pointer-to-int, whereas p2 is an int
因此,也强烈反对在同一行上定义具有不同间接级别的变量。p2
不是int
,而是指向int
的指针。因此,它可以保存int
变量的地址
语法int*p2代码>定义指向int
的指针
用&i
初始化p2
将变量i
的地址存储到p2
中。修改由p2
指向的值将修改i
的值
以下可选语法都是等效的:
int *p2 = &i;
int * p2 = & i;
int * p2 =& i;
int*p2=&i;
int* p2 = &i;
首选语法是int*p2=&i代码>因为它避免了在同一行上定义多个变量时的常见误解:
int *p1, *p2; // defines 2 pointers to int
int *p1, p2; // p1 is a pointer-to-int, whereas p2 is an int
将*
添加到类型会使后一种定义非常混乱:
int* p1, p2; // p1 is a pointer-to-int, whereas p2 is an int
因此,强烈反对在同一行上定义具有不同间接级别的变量。指针是内存地址的抽象,具有一些相关的类型语义
p2
具有类型int*
,或“指向int
的指针”。它存储整数对象的位置(在本例中,是对象的位置i
)。表达式*p2
的类型为int
:
p2 == &i; // both expressions have type int * and evaluate to an address value
*p2 == i; // both expressions have type int and evaluate to an integer value
指针的大小与存储地址值所需的大小一样,但该地址值是针对给定平台表示的(无论是单个整数值,还是表示页码和偏移量的一对值,或其他格式)。请注意,不同的指针类型可能有不同的大小,尽管在现代桌面架构中,它们都是相同的大小(32或64位)
指针的类型对指针算法很重要。给定一个指针p
,表达式p+1
生成指向类型的下一个对象的地址。如果指向的类型为1字节宽(如char
),且其当前地址为0x8000,则p+1
生成下一个字节的地址,或0x8001。如果类型为4字节宽(例如长
),且其当前地址为0x8000,则p+1
将生成下一个第四个字节的地址,即0x8004 指针是内存地址的抽象,具有一些相关的类型语义
p2
具有类型int*
,或“指向int
的指针”。它存储整数对象的位置(在本例中,是对象的位置i
)。表达式*p2
的类型为int
:
p2 == &i; // both expressions have type int * and evaluate to an address value
*p2 == i; // both expressions have type int and evaluate to an integer value
指针的大小与存储地址值所需的大小一样,但该地址值是针对给定平台表示的(无论是单个整数值,还是表示页码和偏移量的一对值,或其他格式)。请注意,不同的指针类型可能有不同的大小,尽管在现代桌面架构中,它们都是相同的大小(32或64位)
指针的类型对指针算法很重要。给定一个指针p
,表达式p+1
生成指向类型的下一个对象的地址。如果指向的类型为1字节宽(如char
),且其当前地址为0x8000,则p+1
生成下一个字节的地址,或0x8001。如果类型为4字节宽(例如长
),且其当前地址为0x8000,则p+1
将生成下一个第四个字节的地址,即0x8004