C++中指针里面的*怎么用
我自己看书学C++,看到指针这有些疑问,希望大家帮忙详细解答一下,谢谢~如果能根据问题再给我扩充一下相关知识那就更好啦~#include<iostream>intmain...
我自己看书学C++,看到指针这有些疑问,希望大家帮忙详细解答一下,谢谢~
如果能根据问题再给我扩充一下相关知识那就更好啦~
#include<iostream>
int main()
{
int ival = 1024;
int *p, *q;
p = &ival;
q = p;
std::cout << *q;
return 0;
}
为什么在定义中有"*"而在后面的赋值中不加"*",加了反而错误?
#include<iostream>
int main()
{
int ival = 1024;
int *p;
int **q;
p = &ival;
*q =p;
std::cout <<**q;
return 0;
}
为什么形式上没有错误但运行的时候会提示
error C4700: uninitialized local variable 'q' used?
#include<iostream>
int main()
{
int i = 42, j = 1024;
int *p1 = &i, *p2 = &j;
*p2 = *p1 * *p2;
std::cout << j;
return 0;
}
*p2 = *p1 * *p2;应该是通过指针赋值吧,但是后面乘法那部分看不懂,
不知道为什么p1 p2前为什么要加"*".
#include<iostream>
using namespace std;
int main()
{
int **mat;
int *matRow, *matCol;
int nMaxRow = 0, nMaxCol = 0;
bool bFind = false;
int nTargetRow = 0, nTargetCol = 0, nSaddlePoint = 0;
int i, j;
cout << "Please input the number of rows and the number of columns:" << endl;
cin >> nMaxRow >> nMaxCol;
mat = new int *[nMaxRow];
for (i = 0; i < nMaxRow; i++)
mat[i] = new int[nMaxCol];
matRow = new int[nMaxRow];
matCol = new int[nMaxCol];
cout << "Please input the elements:" << endl;
这部分程序中mat = new int *[nMaxRow];在[nMaxRow]前的*是怎么回事?
mat = new int *[nMaxRow];和matRow = new int[nMaxRow];有什么区别? 展开
如果能根据问题再给我扩充一下相关知识那就更好啦~
#include<iostream>
int main()
{
int ival = 1024;
int *p, *q;
p = &ival;
q = p;
std::cout << *q;
return 0;
}
为什么在定义中有"*"而在后面的赋值中不加"*",加了反而错误?
#include<iostream>
int main()
{
int ival = 1024;
int *p;
int **q;
p = &ival;
*q =p;
std::cout <<**q;
return 0;
}
为什么形式上没有错误但运行的时候会提示
error C4700: uninitialized local variable 'q' used?
#include<iostream>
int main()
{
int i = 42, j = 1024;
int *p1 = &i, *p2 = &j;
*p2 = *p1 * *p2;
std::cout << j;
return 0;
}
*p2 = *p1 * *p2;应该是通过指针赋值吧,但是后面乘法那部分看不懂,
不知道为什么p1 p2前为什么要加"*".
#include<iostream>
using namespace std;
int main()
{
int **mat;
int *matRow, *matCol;
int nMaxRow = 0, nMaxCol = 0;
bool bFind = false;
int nTargetRow = 0, nTargetCol = 0, nSaddlePoint = 0;
int i, j;
cout << "Please input the number of rows and the number of columns:" << endl;
cin >> nMaxRow >> nMaxCol;
mat = new int *[nMaxRow];
for (i = 0; i < nMaxRow; i++)
mat[i] = new int[nMaxCol];
matRow = new int[nMaxRow];
matCol = new int[nMaxCol];
cout << "Please input the elements:" << endl;
这部分程序中mat = new int *[nMaxRow];在[nMaxRow]前的*是怎么回事?
mat = new int *[nMaxRow];和matRow = new int[nMaxRow];有什么区别? 展开
展开全部
在声明语句中的“*”是与前面的类型符号配合的,而不是与后面的变量名配合的,如int *p;是声明了一个int *型指针变量p,而不是一个int型变量*p;指针变量是p,所以后面赋值时不得再加"*"。
指针p并没有赋值,是野指针,不能作右值。
运算表达式中单独的“*”基本就两种情况:一是在指针前,它是取指针所指对象的值;二是在两个变量间,它是乘号。*p2 = *p1 * *p2;的意思是*p2 = (*p1) * (*p2);,它就是把p1指向的变量的值即i的值乘以p2指向的变量的值即j的值,将其结果赋给p2指向的变量即j。所以这里p1、p2前面的“*”是取值操作符,显然和声明语句中的"*"不是一回事。
mat = new int *[nMaxRow];在[nMaxRow]前的*的意义已在第一问中回答了,它是与int配合使用的,意思是创建一个元素个数为nMaxRow的存放int *型指针的动态数组,将将第一个元素的地址赋给指针变量mat。
追问
看懂了一些,但还是有点小问题
2.p不是获得了ival的地址了吗?那p不是应该赋值为1024吗?
4.mat = new int *[nMaxRow];和matRow = new int[nMaxRow];有什么区别?
麻烦再回答一下啊~十分感谢!
追答
2 是我说错了,当时怎么弄的我也想不起来了。问题在于q还没有赋值,它的第下级指针*q就是野指针。要先为q赋值,才会有*q。
4.mat = new int *[nMaxRow];是创建一个长度为nMaxRow的数组,这个数组的每一个元素都是int *型指针,并把第一个元素的地址赋给mat指针(显然这里mat是二级指针)。matRow = new int[nMaxRow];是创建一个长度为nMaxRow的数组,这个数组的每一个元素都是int型变量,并把第一个元素的地址赋给指针matRow,显然这里matRow是指向int变量的一级指针。
展开全部
声明变量时加 * 是说明它是指针类型
使用时加 * 的作用是,取出其值,当变量使用
#include<iostream>
int main()
{
int ival = 1024;//整型变量
int *p;//指针
int **q;//指针的指针
p = &ival;//指针p填充变量ival的地址
*q =p;//将p的值复制给指针q所存储的的指针
std::cout <<**q;//*q取出q的值当变量使用(相当于p),*(*q)相当于*p,而*p就是ival所在的内存;
return 0;
}
http://www.cnblogs.com/dzry/archive/2011/05/12/2044835.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |