对于数组a[10];
a则为数组的首地址,其实就是一个 指向a[0]常指针。
则可以用:
*(a+1) = a[1];
*(a+n)=a[n];
注意:
用*(a++) 表示 a[1]; 这种表示是错的a 是一个常指针不能改变其值。
二维数组的一种表示和输出方法:
环来进行,这样不但速度慢,而且写起来也很长。所以现在提供
一个函数来实现这个功能。。。
原型:
extern void *memset(void *buffer, int c, int count);
包含头文件:<string.h>
注意这个函数是字符串函数,所以一定要包含字符串头文件。
使用方法:
int a[50];memset(a,0,sizeof(a));
这样呢,就将数组a内所有的值都赋成0了,sizeof也是一个函数,
得到数组a的字节大小。
另外需要注意的是,memset函数是逐字节进行填充,所以a一般
为char *型。对于其它类型的a,可以填充的值有两个,0和-1。因
为计算机中用二进制补码表示数字,0和二进制补码为全0,-1的
二进制补码为全1。
const 指针:
用const修饰指针有两种情况:
情况1,
int i = 3;
const int *p;(int const *p;这两种写法等价。并且定义的时候初始化和在后面初始化都可以,没有区别)
p = &i;
p为一个指向常量的指针。
*p的值不能更改。
意思是不能再用*p来更改i的值。
可以用p = &b;来改变p的指向。
情况2,
int i = 3;
int *const p = 3; (这里定义的时候就要初始化不能放在后面初始化)
这里p是一个常指针,意思p的值不能更改
意思是不能用p = &b;来改变p的指向
但是可以用*p来更改i的值。
void指针的用法 举例
#include<stdio.h>
void main()
{
void *p;
int i = 3;
p = &i;
printf("%d , %d %d \n", &i, i , *(int *)p);//*(int *)p) 将void型指针强制转换成int型。然后在前面加*输出指针保存的值。
}