一、知识小结:
1、数组名通常表示数组首元素的地址,但是有两个例外
1) sizeof(数组名) 这里的数组名表示整个数组,计算的是整个数组的大小。
2)&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
2、sizeof只是一个操作符,不访问括号里的内容,计算的的对象是所占内存的大小-单位是字节,返回的类型是 size_t。
3、strlen是一个库函数,计算的是字符串的长度,遇到'\0'停止。
二、指针笔试题
1、
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int *ptr = (int *)(&a + 1);
printf( "%d,%d", *(a + 1), *(ptr - 1));
return 0;
}
思路:a是数组名,表示数组首元素地址,+1表示跳过一个整型,*(a+1)等价于a[1],所以*(a+1)的值是1。&a取出的是整个数组的地址,&a+1 表示跳过一整个数组,(int*)(&a+1) 表示把&a+1地址强制类型转换为整型,ptr是一个指针变量,内存中存的是(&a+1)的地址,*(ptr-1)表示对(&a+1)的地址减去四个字节后的地址解引用,结果是5。