指针与数组的关系是什么啊
1、指针:系统为某一个变量开辟单元格,指针便指向此单元格的变量值。
2、数组:系统为某一组数开辟一组单元格,数组首地址便是你定义的数组变量名。
数组和指针的唯一区别是,不能改变数组名称指向的地址。
对于数组来说,数组的首地址,也可以用指针来表示操作,如:
int a[10];
int *p,n;
p = a;
对第一个元素取值,可以用几种方法:
n =a[0];
n = *p;
n = p[0];
n = *(p+0) ;
但是以下语句则是非法的:
readings = totals; // 非法!不能改变 readings totals = dptr; // 非法!不能改变 totals
数组名称是指针常量。不能让它们指向除了它们所代表的数组之外的任何东西。
扩展资料
下面的程序定义了一个 double 数组和一个 double 指针,该指针分配了数组的起始地址。随后,不仅指针符号可以与数组名称一起使用,而且下标符号也可以与指针一起使用。
int main()
{
const int NUM_COINS = 5;
double coins[NUM_COINS] = {0.05, 0.1, 0.25, 0.5, 1.0};
double *doublePtr; // Pointer to a double
// Assign the address of the coins array to doublePtr
doublePtr = coins;
// Display the contents of the coins array
// Use subscripts with the pointer!
cout << setprecision (2);
cout << "Here are the values in the coins array:\n";
for (int count = 0; count < NUM_COINS; count++)
cout << doublePtr [count] << " ";
// Display the contents of the coins array again, but this time use pointer notation with the array name!
cout << "\nAnd here they are again:\n";
for (int count = 0; count < NUM_COINS; count++)
cout << *(coins + count) << " ";
cout << endl;
return 0;
}
程序输出结果:
Here are the values in the coins array: 0.05 0.1 0.25 0.5 1 And here they are again: 0.05 0.1 0.25 0.5 1
当一个数组的地址分配给一个指针时,就不需要地址运算符了。由于数组的名称已经是一个地址,所以使用 & 运算符是不正确的。但是,可以使用地址运算符来获取数组中单个元素的地址。
组只是定义在栈区的一个连续变量,它的首地址就是一个指针。
不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。
在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。
如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容了。
扩展资料:
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
指针数组:就是一个由指针组成的数组,那个数组的各个元素都是指针,指向某个内存地址。 char *p[10];//p是一个指针数组
数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是一个常数。
example:
char (*p)[10]//p是一个数组指针
参考资料来源:百度百科-数组
参考资料来源:百度百科-指针 (编程语言中的一个对象)
①指针:系统为某一个变量开辟单元格,指针便指向此单元格的变量值。
②数组:系统为某一组数开辟一组单元格,数组首地址便是你定义的数组变量名。
区别在于,指针是通过的单元格的变量名找到变量值,数组只上升到变量名这个级别。
2,指针是一个指向内存空间的变量。
对于数组来说,数组的首地址,也可以用指针来表示操作,如:
int a[10];
int *p,n;
p = a;
对第一个元素取值,可以用几种方法:
n =a[0];
n = *p;
n = p[0];
n = *(p+0) ;
3,不同的地方是数组是由编译器分配的空间,变量名是不能再赋值的;而指针是可以重复赋值的(除定义为const)
如:
p = a; //正确
a = p; //错误
联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就是一个指针。
总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容啦。
经验之谈,楼楼加分啊