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