一、数组名是数组首元素的地址,但有两个例外:
sizeof(数组名),计算的是整个数组的大小、单位是字节,sizeof内部单独放一个数组名,数组名表示整个数组;
&数组名,取出的是数组的地址。&数组名,数组名表示整个数组;
如图:在数组名未加1前,arr、&arr[0]、&arr所表示的地址大小一样,但是当+1后发现&arr地址却增加了36(数组含有9个字符,int型每个字符占4个字节),说明&arr表示的是整个数组地址。
二、指针
①指针类型的意义
1、指针类型决定了指针进行解引用操作(即*)的时候,能够访问空间的大小
如:int* p:*p能够访问4个字节
char* p:*p能够访问1个字节
double* p:*p能够访问8个字节
虽说都能存放4个字节大小的地址(32位运行情况下)如上图,但在解引用更改数据时,则结果不同;
如图一和图二可知,此时int型指针可访问4个字节
由图三图四可知,char型指针可访问1个字节。
2、指针类型同样决定了指针走一步走多长
如:int* p;p+1-----》向后走4个字节;
char* p;p+1-----》向后走1个字节;
②指针运算
指针-指针----------》等于指针中间元素的个数;
如int* arr[5]={1,2,3,4,5};
&arr[4]-&arr[0]=5;
③指针中,常用assert()来保证代码中指针的有效性(用于判断指针是否为空)
char str[]="abd";
assert(str!=NULL);
一些学习过程中了解的,有任何希望大家指出。谢谢!!!