c++中,**q与*(*q)的区别
时间: 2024-01-17 18:18:17 浏览: 18
在C++中,q和*(*q)有以下区别:
1. q是一个指针变量,而*(*q)是对指针的两次解引用操作。
2. q存储的是一个地址,而*(*q)存储的是该地址指向的值。
3. q可以通过赋值操作来改变指向的地址,而*(*q)只能获取指向地址的值。
下面是一个示例代码来演示这两者的区别:
```cpp
#include <iostream>
int main() {
int A = 10;
int* p = &A;
int** q = &p;
std::cout << "p的值(地址):" << p << std::endl;
std::cout << "*p的值(指向的值):" << *p << std::endl;
std::cout << "q的值(地址):" << q << std::endl;
std::cout << "*q的值(指向的地址的值):" << *q << std::endl;
std::cout << "**q的值(指向的地址的值的值):" << **q << std::endl;
return 0;
}
```
输出结果为:
```
p的值(地址):0x7ffeeb4e6a9c
*p的值(指向的值):10
q的值(地址):0x7ffeeb4e6a98
*q的值(指向的地址的值):0x7ffeeb4e6a9c
**q的值(指向的地址的值的值):10
```
相关问题
c++中,**q与*(*q)的区别
在C++中,**q和*(*q)有不同的含义和用法。
1. **q:这表示q是一个指向指针的指针。也就是说,q本身是一个指针,指向的是另一个指针的地址。通过**q,我们可以访问到指针指向的值。例如:
```cpp
int a = 10;
int* p = &a;
int** q = &p;
cout << **q; // 输出:10
```
在上面的例子中,**q表示访问q指向的指针p所指向的值a。
2. *(*q):这表示q是一个指向指针的引用。也就是说,q本身是一个引用,引用的是一个指针。通过*(*q),我们可以访问到指针指向的值。例如:
```cpp
int a = 10;
int* p = &a;
int*& q = p;
cout << *(*q); // 输出:10
```
在上面的例子中,*(*q)表示访问q引用的指针p所指向的值a。
while(*p||*q)
while(*p||*q)是一个循环条件,表示当指针p或者指针q所指向的值不为0时,循环会一直执行。这个条件可以用于循环遍历数组或者字符串,直到遇到结束标志为止。
以下是一个示例代码,演示了while(*p||*q)的用法:
```c++
char* p = "Hello";
char* q = "World";
while(*p || *q) {
if(*p) {
cout << *p;
p++;
}
if(*q) {
cout << *q;
q++;
}
}
// 输出:HWeolrllod
```
这段代码会依次输出指针p和指针q所指向的字符,直到遇到字符串结束标志'\0'为止。