C++ 指针上的这个操作是如何工作的?
我的问题是A行和B行做什么,为什么输出都是4C++ 指针上的这个操作是如何工作的?,c++,pointers,C++,Pointers,我的问题是A行和B行做什么,为什么输出都是4 int x = 4; int* q = &x; // Is it always equivalent to int *q = &x; ? cout << "q = " << q << endl; // output: q = 0xbfdded70 int i = *q; // A int j = *(int*)q
int x = 4;
int* q = &x; // Is it always equivalent to int *q = &x; ?
cout << "q = " << q << endl; // output: q = 0xbfdded70
int i = *q; // A
int j = *(int*)q; // B, when is this necessary?
cout << "i = " << i << endl; // output: i = 4
cout << "j = " << j << endl; // output: j = 4
取消引用指针以获取指向的值
int i = *q; // A
类型将指针强制转换为int*,然后取消引用它
两者都是相同的,因为指针已经指向int。所以在第二种情况下根本不需要将类型转换为int*
在这两种情况下,进一步取消限制会产生定点整变量值
取消引用指针以获取指向的值
int i = *q; // A
类型将指针强制转换为int*,然后取消引用它
两者都是相同的,因为指针已经指向int。所以在第二种情况下根本不需要将类型转换为int*
进一步取消限制在这两种情况下都会产生定点整变量值。行A和B是等效的,因为q已经是int*了,因此int*q等于q。
int i=*q;使i成为q指向的整数的值。如果你想使i等于地址本身,就去掉星号。行A和B是等价的,因为q已经是int*了,因此int*q等于q。 int i=*q;使i成为q指向的整数的值。如果要使i等于地址本身,请删除星号。A:-获取指向值变量或对象的指针并返回值 B:强制转换为int*而不是取消引用 结果是相同的,因为指针已经指向int。就是这样。A:-获取指向值变量或对象的指针并返回值 B:强制转换为int*而不是取消引用
结果是相同的,因为指针已经指向int。就是这样。行A获取q指向的值并将其分配给i。第b行将q强制转换为int*类型,int*类型已经是q的类型,因此强制转换是完全冗余/无意义的,然后获取q指向的值并将其分配给j
两者都给你4,因为这是q指向的值。行A取q指向的值,并将其分配给i。第b行将q强制转换为int*类型,int*类型已经是q的类型,因此强制转换是完全冗余/无意义的,然后获取q指向的值并将其分配给j
int j = *(int*)q; // B
两者都给你4,因为这是q指向的值
int j = *(int*)q; // B
x是4
int x = 4;
q是x的存储位置,其中包含4
int* q = &x;
i是内存位置q处的值
int i = *q; // A
j是存储位置q处的值。q被转换为int指针,但它已经是这样了
x是4
int x = 4;
q是x的存储位置,其中包含4
int* q = &x;
i是内存位置q处的值
int i = *q; // A
j是存储位置q处的值。q被强制转换为int指针,但它已经是了。行类型为int*的反引用指针q,即指向int值的指针
行B在取消引用之前将q转换为int*,因此行B与int j=*q;相同 行类型为int*的反引用指针q,即指向int值的指针
行B在取消引用之前将q转换为int*,因此行B与int j=*q;相同 这是指针的基本用法,在取消引用指针时,您可以访问指针指向的变量:
int j = *(int*)q; // B
虽然B执行完全相同的操作,但它还将指针强制转换为相同的类型。你可以这样写:
int i = *q; // A
不需要int*这是指针的基本用法,在取消引用指针访问指针指向的变量时:
int j = *(int*)q; // B
虽然B执行完全相同的操作,但它还将指针强制转换为相同的类型。你可以这样写:
int i = *q; // A
不需要int*is*int*q;在某些情况下有必要吗?我想不出一个,但想知道是否有这种可能性。int*q意味着无论q是什么,我想把它当作指向int的指针。当你想对数据的位布局做一些技巧时,它很有用。此外,C语言中的程序通常会通过将指针强制转换为void*,来隐藏指针实际指向的内容。因此,用最简单的术语来说,如果q不是int*,则int*q是必需的。is*int*q;在某些情况下有必要吗?我想不出一个,但想知道是否有这种可能性。int*q意味着无论q是什么,我想把它当作指向int的指针。当你想对数据的位布局做一些技巧时,它很有用。此外,C语言中的程序通常会通过将指针强制转换为void*,来隐藏指针实际指向的内容。因此,用最简单的术语来说,如果q不是int*,则int*q是必需的。