任何指针都占用8个字节的存储空间
清空指针
p=0;
p=NULL;
// 清空指针后,不能再间接访问其他存储空间
//*p = 100.7;错误
//*p = 100.7;错误
数组名相当于指针常量,不可被更改
int与const哪个放前面都一样
相同
const int ic=20;
int const ic=20;
相同:
const int *pi;
int const *pi;
区别
int const*pi;//不能通过指针修改所指空间内容(可以通过其他方式修改),但是可以修改所指内存
int *const pi;//只是一个指针常量不能修改所指内存,但是可以通过指针修改所指空间内容
1.数组元素的访问方式
int ages[5];
int *p;
p = ages;
1> 数组名[下标] ages[i]
2> 指针变量名[下标] p[i]
3> *(p + i)
2.指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4
char * 1
double * 8
数组四种输出方法:
int i,a[]={1,2,3,4,5,6,7,8,9,0};
int *pa;
pa=a;
int *pa;
pa=a;
//方法一
for (i=0; i<=9; i++)
{
printf("%d ",a[i]);
}
//方法二
for (i=0; i<=9; i++)
{
printf("%d ",*(a+i));
}
//方法三
for (i=0; i<=9; i++)
{
printf("%d ",pa[i]);
}
//方法四
for (i=0; i<=9; i++)
{
printf("%d ",*(pa+i));
}
//方法五
for (i=0; i<=9; i++)
{
printf("%d ",*pa);
pa++;
}
for (i=0; i<=9; i++)
{
printf("%d ",a[i]);
}
//方法二
for (i=0; i<=9; i++)
{
printf("%d ",*(a+i));
}
//方法三
for (i=0; i<=9; i++)
{
printf("%d ",pa[i]);
}
//方法四
for (i=0; i<=9; i++)
{
printf("%d ",*(pa+i));
}
//方法五
for (i=0; i<=9; i++)
{
printf("%d ",*pa);
pa++;
}
当数组名作为函数参数时,退化为首元素指
指针与数组比较
所占空间不同!
- -指针:只与操作系统位数有关!
- -数组:与元素个数和类型有关!
数组名是常量地址,不能重指向(不能赋值)!
指针可以重指向!
sizeof是运算符,并不是指针,a代表的并非元素首地址指针
printf("%zd ",sizeof(a)/sizeof(int));