指针声明

时间:2017-08-10 22:15:08

标签: c++ pointers

我正在进行编码练习,用户输入两个整数,代码通过指针显示整数。当我声明指针然后在代码中将它们指向值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; 

2 个答案:

答案 0 :(得分:1)

使用前需要声明指针。在第一个代码中,您没有声明指针ptrAptrB。 要声明指针,比如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指向一个整数而我们正在取消引用它,&aint*因为我们正在服用整数的地址,因此您尝试将int*分配给int*。因此,问题。要执行您想要执行的操作,您需要分配指针,而不是其值。

int *ptrA;
...
ptrA = &a;

误解产生于声明中令人困惑的地方*。许多人都像这样编写指针声明。

int* ptrA = ...;

这更清楚地表明*是类型的一部分而不是一个解除引用运算符。但这也会让你陷入不同的陷阱。你能发现这行代码中可能存在的错误吗?

int* ptrA, ptrB;