const修饰变量:
const int a=20;
int *p=&a;
*p=650;
printf("%d\n",a);
const修饰指针:
const int *p;
可以修改p,不可以修改*p
int const *p;
可以修改p,不可以修改*p
int *const p;
可以修改*p,不可以修改p
const int *const p;
不可以修改p,也不可以修改*p
总结:const向右修饰,被修饰的部分即为只读(不能修改)。
常用: 在函数的形参内,用来限制指针所对应的内存空间为只读。
指针和数组:
数组名:数组名是地址常量,不可以被修改
指针是变量,可以用数组名给指针赋值
取数组元素:
int a[] = { 1,2,3,5,4,6,8,7 };
int n = sizeof(a) / sizeof(a[0]);
for (size_t i = 0; i < n; i++)
{
printf("%d",a[i]);
}
int arr[ ]={1,2,3,5,4,6};
int *p=arr;
arr[0] == *(arr+0) == p[0] == *(p+0)
指针和数组的区别:
1.指针是变量,数组名为常量。
2.sizeof(指针) =====》4/8字节
sizeof(数组)====》 数组的实际字节数
int a[] = {1,2,3,4,5,6,7,8,9};
int n = sizeof(a) / sizeof(a[0]);
int* p = a;
printf("sizeof(a)=%u\n",sizeof(a));
printf("sizeof(p)=%u\n", sizeof(p));
输出 :
sizeof(a)=36
sizeof(p)=8
指针++操作数组:
int a[] = {1,2,3,4,5,6,7,8,9};
int *p = a;
int n = sizeof(a) / sizeof(a[0]);
printf("first p=%p\n",p);
for (size_t i = 0; i < n; i++)
{
printf("%d",*p);
p++;
}
putchar("\n");
printf("p=%p\n",p);
指针两种方式访问数组:
int a[10] = {1,2,3,4,5,6,7,8,9};
int n = sizeof(a) / sizeof(a[0]);
int* p = a;
printf("first p=%p\n",p);
for (size_t i = 0; i < n; i++)
{
*(p + i) = 10 + i;
}
for (size_t i = 0; i < n; i++)
{
printf("%d ",*p);
p++;
}
printf("\n");
输出:
first p=0095FAD8
10 11 12 13 14 15 16 17 18 19