c++语言的简单问题

来源:百度知道 编辑:UC知道 时间:2024/07/03 09:19:01
1.
int *p1
int a
p1=a
p1=&a
*p1=a
这三种表达方式都代表了什么,有什么不同
int a[2][3]={1,2,3,4,5,6};
int (*p1)[4];
p1=a;
这里面的p1=a是什么意思

int*p1 代表定义一个整行的指针 P1
int a 代表定义一个变量a
p1=a 代表把a的值赋给p1
p1=&a 说明下&a是一个地址预算 代表把a地址里的值赋给p1
*p1=a 说明下*p1是一个地址运算 代表把a的值赋给
*p1所指向的变量

1.声明一个指针变量,它将指向int类型的变量
2.声明一个int类型的变量
3.将a的值赋给p1,如果接着前2个句子的话,那么这句话会出错
4.将a的地址赋给p1,同上,这是正确的。
5.将a的值赋给p1所指向的变量,同上,这句话是错的。

对于你的补充问题,如果你知道基于数组的运算除了sizeof()之外,编译器总会把它们转化成指针来运算就好理解了。
int (*p)a[4],声明p是一个指向int型数组的指针变量,该数组有4个元素。之所以不能理解成:p是一个指针数组,该数组有4个指针,每个均指向一个int型变量,是因为*的优先级低于[],所以带了括号。
因为数组名总代表着该数组的首地址,所以p1=a是正确的:将数组的首地址赋给p1,也即是p1指向该数组。

简单的来说 'P1'是一个指针,而'a'是一个数组,P1=a;就是P1这个指针指向a这个数组的首元素 即:&a[0]

p1=a 意义上是错误的,指针变量不能指向一个常数
p1=&a p1指向变量a的地址,以后*p就代表a了,p1就代表&a了
*p1=a 把a的值赋给p1地址的值

1.声明一个INT型的指针变量
2.声明一个INT型的变量A
3.将A赋给P1变量(两种标量类型要一样,不然编译报错)
4.把变量A的存储地址赋给指针P1(多说一句,&这个符号在C++中还有引用的意思)
5.将A的值赋给指针P1所指向的变量.
这个知识点算是C++的一个难点,指针可以想像成是汽车中油表中的游标,只是这里是存储器.
&操作符是获取变量地址的作用,指针变量用于存放地址!
同时还应注意指针也是变量,所以指针也有内存