深入理解指针3
数组
数组名是数组首元素的地址,但有两个例外:
- sizeof(数组名)//sizeof的括号中单独放一个数组名的时候,数组名表示整个数组,计算出但是整个数组的大小,单位是字节
- &数组名 //这里的数组名也表示整个数组,取出的是这个数组的地址
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int arr[10] = {
1,2,3,4,5,6,7,8,9,10 };
printf("&arr[0] =%p\n", &arr[0]);//首元素的地址
printf("&arr[0]+1 =%p\n", &arr[0]+1);//首元素的地址+1
printf("arr =%p\n", arr);//首元素的地址
printf("arr+1 =%p\n", arr+1);//首元素的地址+1
printf("&arr =%p\n", &arr);//数组的地址
printf("&arr+1 =%p\n", &arr+1);//数组的地址+1
return 0;
}
&arr+1比&arr大了40,即跳过了整个arr数组
&arr[0]——>int*
arr ——>int*
&arr ——>类型不是int*(数组指针)
使用指针访问数组
按顺序输出数组元素:
方法一:p不变
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int arr[10] = {
1,2,3,4,5,6,7,8,9,10 };
int* p = arr;
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0;i < sz;i++) {
printf("%d ", *(p + i));
}
return 0;
}
方法二:p改变
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int arr[10] = {
1,2,3,4,5,6,7,8,9,10 };
int* p = arr;
int<