##############################################################################
#首先对指针和数组名的得出如下结论:
##############################################################################
1.指针:只有指针可以保存地址,指针也只能用来保存地址
2.数组名:①数组名的内涵在于其指代实体是一种数据结够,这种数据结构就是数组
②数组名的外延在于其可以转换为指向其指代结构的指针,而且是一个指针常量
③指向数组的指针则是另外一钟变量类型,仅仅意味着占据存放的地址
3.&和*在数组和指针中的运算
①一维数组和指针在“*”运算都有访存操作
②多维数组在“*”运算只是类型改变,没有具体操作
③指针变量在“*”运算先访问内存,获得地址,再取地址对应内存中的值
④指针变量在“&”运算时,得到指针变量的地址
⑤数组在“&”运算时,只是类型改变,没有具体操作
4.对数组进行sizeof运算时,结果是整个数组占用内存空间的大小;而sizeof(指针)得到的值是编译器分配给指针的内存空间
##############################################################################
#通过实例看上面结论
##############################################################################
1 #include <iostream>
2
3 using namespace std;
4
5 void printf(int temp[])
6 {
7 cout << "sizeof(temp):" << sizeof(temp) << endl;
8
9 cout << "*(temp++):" << * (temp++) << endl;
10 cout << "*(temp):" << * temp << endl;
11 }
12
13 int main()
14 {
15 int num[10]={10,2,3,4,5,6};
16 int * p = num;
17
18 cout << "sizeof(num):" << sizeof(num) << endl;;
19 cout << "sizeof(p):" << sizeof(p) << endl;
20
21 printf(num);
22 }
//运行结果:
sizeof(num):40
sizeof(p):4
sizeof(temp):4
*(temp++):10
*(temp):2
说明:
①程序中第18行,说明数组名指代一种数据结构:数组
②程序中第16行,说明数组名可以作为指针常量,不能将数组名放在“=”走边
③程序中第7、9、10行,说明数组名作为形参时,在函数体内,失去了本身的内涵,即不能指代一种数据结够,仅仅是一个指针而已;可以对其进行自增、自减等操作(注意:如果自增或者自减超出数组的大小的范围,将会是一个乱值)
##############################################################################
#区分三类指针
##############################################################################
1.指向常量的指针:是指一个指向常量的指针变量。不可以修改这个指针所指向的变量,但是可以将这个指针指向另外一个常量,例如
const char * name = "zhang";
name[3] = "t";//错误,禁止通过name去修改它所指向的数据
name="hello";/正确
2.常指针:将指针本身,不是将指针所指向的变量声明为常量。
例如:
char * const name="hello";
name[3] = "t";//正确
name = "nihao";//错误
3.指向常量的常指针:这个指针不能变,这个指针所指向的变量也不能变。
例如:
const char * const name = "zhang";
name[3] = "t";//错误
name = "hello";//错误
参考:http://www.360doc.com/content/10/0530/16/1506547_30328230.shtml
数组名和指针详解
最新推荐文章于 2025-06-16 16:05:43 发布