C++ 指针声明

C++ 指针声明,c++,pointers,C++,Pointers,我在做一个编码练习,用户输入两个整数,代码通过指针显示整数。当我声明指针,然后在代码中稍后将它们指向值a和b时,代码没有编译。然而,告诉指针(当它们被声明时)应该直接指向哪里是有效的。我想知道为什么第一种方法不起作用 不起作用的代码 // variables int a; int b; // Ask for int a cout << "Enter integer a : "; cin >> a; // Ask for int b cout <<

我在做一个编码练习,用户输入两个整数,代码通过指针显示整数。当我声明指针,然后在代码中稍后将它们指向值a和b时,代码没有编译。然而,告诉指针(当它们被声明时)应该直接指向哪里是有效的。我想知道为什么第一种方法不起作用

不起作用的代码

// variables
int a; 
int b; 


// Ask for int a 
cout << "Enter integer a : "; 
cin >> a; 

// Ask for int b
cout << "Enter integer b : "; 
cin >> b; 

// Pointing pointers to a and b; 
*ptrA = &a; 
*ptrB = &b; 

// Print values a and b 
cout << "a: " << *ptrA << endl; 
cout << "b: " << *ptrB << endl; 
//变量
INTA;
int b;
//索取INTA
cout>a;
//询问int b
cout>b;
//将指针指向a和b;
*ptrA=&a;
*ptrB=&b;
//打印值a和b

使用前需要声明cout指针。在第一个代码中,您没有​ 声明的指针
ptrA
ptrB
。 要声明指针,比如
int
pointer,我们需要这样做

int x=0;
int *iptr;
iptr=&x;
单行代码:

int *iptr=&x;
它是在申报时草签的

我们每次使用指针时都需要声明它,因为特定的指针可以指向特定的数据类型。确保指针指向所需的数据类型并保护信息丢失。指针也是一种存储内存地址的类型变量,因为我们需要声明其他变量,这样在使用之前也需要声明指针


像对待其他变量一样对待指针,请记住指针只能存储内存地址

使用前需要声明指针。在第一个代码中,您没有​ 声明的指针
ptrA
ptrB
。 要声明指针,比如
int
pointer,我们需要这样做

int x=0;
int *iptr;
iptr=&x;
单行代码:

int *iptr=&x;
它是在申报时草签的

我们每次使用指针时都需要声明它,因为特定的指针可以指向特定的数据类型。确保指针指向所需的数据类型并保护信息丢失。指针也是一种存储内存地址的类型变量,因为我们需要声明其他变量,这样在使用之前也需要声明指针


对待指针就像对待其他变量一样,请记住指针只能存储内存地址

这两种语法之间的差异还不清楚

int *ptrA = &a;
这是在声明一个名为
ptrA
的变量,其类型为
int*
。其值设置为
a
的地址。这就是你想要的行为

int *ptrA;
...
*ptrA = &a;
这再次声明了一个名为
ptrA
的变量,其类型为
int*
。然后它做一个作业。第二行的
*ptrA
表示分配
ptrA
所指向的对象的值。
*ptrA
的类型是
int
,因为
ptrA
指向一个整数,我们对它进行解引用,
&a
是一个
int*
,因为我们取整数的地址,所以您试图将
int*
分配给
int*
。因此,问题就来了。要执行您打算执行的操作,您需要指定指针,而不是其值

int *ptrA;
...
ptrA = &a;
误解源于声明中混乱的地方有一个
*
。很多人都这样写指针声明

int* ptrA = ...;
这使得
*
是类型的一部分,而不是解引用运算符,这一点更加清楚。但这也会让你陷入另一个陷阱。你能找出这行代码中可能出现的错误吗

int* ptrA, ptrB;

这两种语法之间有一个区别,现在还不清楚

int *ptrA = &a;
这是在声明一个名为
ptrA
的变量,其类型为
int*
。其值设置为
a
的地址。这就是你想要的行为

int *ptrA;
...
*ptrA = &a;
这再次声明了一个名为
ptrA
的变量,其类型为
int*
。然后它做一个作业。第二行的
*ptrA
表示分配
ptrA
所指向的对象的值。
*ptrA
的类型是
int
,因为
ptrA
指向一个整数,我们对它进行解引用,
&a
是一个
int*
,因为我们取整数的地址,所以您试图将
int*
分配给
int*
。因此,问题就来了。要执行您打算执行的操作,您需要指定指针,而不是其值

int *ptrA;
...
ptrA = &a;
误解源于声明中混乱的地方有一个
*
。很多人都这样写指针声明

int* ptrA = ...;
这使得
*
是类型的一部分,而不是解引用运算符,这一点更加清楚。但这也会让你陷入另一个陷阱。你能找出这行代码中可能出现的错误吗

int* ptrA, ptrB;

对我来说似乎很好…第一个代码也为您编译了?@OP请查看我提供的链接。一切都已编译并运行良好…您看到的错误是什么?是的,第一个运行正常。哦,好的。我知道我做错了什么。第一次写错代码时,我只有*ptrA=a;,而不是int*ptrA=a;对我来说似乎很好…第一个代码也为您编译了?@OP请查看我提供的链接。一切都已编译并运行良好…您看到的错误是什么?是的,第一个运行正常。哦,好的。我知道我做错了什么。第一次写错代码时,我只有*ptrA=a;,而不是int*ptrA=a;