我正在进行编码练习,用户输入两个整数,代码通过指针显示整数。当我声明指针然后在代码中将它们指向值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;
有效的代码
// variables
int a;
int b;
int *ptrA = &a;
int *ptrB = &b;
// Ask for int a
cout << "Enter integer a : ";
cin >> a;
// Ask for int b
cout << "Enter integer b : ";
cin >> b;
// Print values a and b
cout << "a: " << *ptrA << endl;
cout << "b: " << *ptrB << endl;
答案 0 :(得分:1)
使用前需要声明指针。在第一个代码中,您没有声明指针ptrA
和ptrB
。
要声明指针,比如int
指针,我们需要这样做
int x=0;
int *iptr;
iptr=&x;
一行代码:
int *iptr=&x;
宣布时初始化。
我们需要在每次使用它时声明一个指针,因为特定指针可以指向该特定数据类型。确保指针指向所需的数据类型并保护信息丢失。另外,指针也是一个存储内存地址的类型变量,因为我们需要声明其他变量,这样在使用之前还需要声明指针。
在处理其他变量时处理指针,记住指针只能存储内存地址
答案 1 :(得分:1)
两种语法之间存在差异,但并不是很明显。
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;