Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果字节内存地址不是int类型的,int类型的C指针如何保存内存地址?_C_Pointers - Fatal编程技术网

如果字节内存地址不是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