int*p;
int b[10];
p=b;
*p=6;
三四行的分别是代表的什么
int* p;
声明一个指向整型(int)数据的指针变量p。p可以存储一个整型变量的内存地址。
int b[10];
声明一个包含10个整型元素的数组变量b。数组名b本身代表了数组的首个元素的地址。
p = b;
指针变量p指向数组b的首个元素的地址。也就是说,现在p指向了数组b的第一个元素。
*p = 6;
指针p所指向的地址上的值设置为6。由于p指向数组b的第一个元素,所以这个语句把数组b的第一个元素的值设置为6。
p是整型指针指向数组b的第一个元素
*p是解引用,就是表示p指向的这个元素的值赋值为6
首先,造成这种区别的原因是间接引用运算符*与下标运算符【】之间优先级不同的差异
int(*p)[3]中首先:(*p)表明p是一个指针,剩下部分作为修饰**int[3]**说明p是一个指针,并且指向的数据类型是一个个包含3个int值的数组。
intp[3]呢?
首先:p先与【】结合,这表明p首先是一个数组,剩下的int作为修饰,表明这个数值的元素的类型是指向int类型的指针。
最后一个,我现在还不是很理解,大家如果愿意教教我,感激不尽!
int *p: p是一个指向int类型的指针,可以存放int类型变量的地址。
p: p是一个指针解引用操作符,可以取出指针p所指向的变量的值。
int (*p)[3]: p是一个指向长度为3的int数组的指针。先将p看作一个整体,然后解释为一个指针,指向一个长度为3的int数组。
下面给出一些具体的例子:
#include <iostream>
int main() {
int a = 10;
int* p = &a; // p指向变量a
std::cout << *p << std::endl; // 输出:10
int b[3] = {1, 2, 3};
int (*q)[3] = &b; // q指向数组b
std::cout << (*q)[0] << std::endl; // 输出:1
return 0;
}
解释: 1. int p = &a; 表示定义一个指针p,指向变量a的地址。 2. p 表示取出p所指向的变量的值,即输出变量a的值。 3. int (q)[3] = &b; 表示定义一个指针q,指向数组b的地址。 4. (q)[0] 表示取出q所指向的数组的第一个元素的值,即输出数组b的第一个元素的值。