常量指针 :
int *const p1 = &a;
p1只能指向a的地址,不能改变,但a的值可以自己改变。
指针常量 :
int const *p1 = &a;
p1指向的地址可以改变,但不能改变指向地址的值。
常指针
是指指针指向的位置不能改变,也就是指针的值只能赋值一次。
指向常量的指针是指指针指向的对象不能改变,也就是说不能通过这个指针来改变指向对象的值,而指针自身的指向是可以改变的。
具体形式:
const char *p;
char const *p;
以上两种是指向常量的指针。
char * const p;
是常指针。
区分就看*和const 谁离指针变量名近,如果* 离的近,就表示指针指向一个常量。
反过来如果是const离的近,则代表是一个常指针。
指针变量的赋值:
指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值。未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址, 决不能赋予任何其它数据,否则将引起错误。 C语言中提供了地址运算符&来表示变量的地址。其一般形式为:& 变量名; 如&a变示变量a的地址,&b表示变量b的地址。
变量本身必须预先说明。设有指向整型变量的指针变量p,如要把整型变量a 的地址赋予p可以有以下两种方式:
(1)指针变量初始化的方法
int a;
int *p=&a;
(2)赋值语句的方法
int a;
int *p;
p=&a;
不允许把一个数赋予指针变量,故下面的赋值是错误的:
int *p;
p=1000;
被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的。
数组指针变量说明的一般形式为:
类型说明符 * 指针变量名
int *p;
其中类型说明符表示所指数组的类型。 从一般形式可以看出指向数组的指针变量和指向普通变量的指针变量的说明是相同的。
引入指针变量后,就可以用指针来访问数组元素了,即采用*(p+i)形式,用间接访问的方法来访问数组元素。
例:
#include <stdio.h>
int pex(int *a, char *b, short *c, double *d)
{
for (int i = 0; i < 10; i++)
{
a++;
b++;
c++;
d++;
printf("%p, %p, %p, %p\n",a, b, c, d);
}
}
void main()
{
int a[10];
char b[10];
short c[10];
double d[10];
pex(a, b, c, d);
getchar();
}
函数名: malloc
功 能: 内存分配函数
用 法: void *malloc(unsigned size);
程序例:
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>
int main(void)
{
char *str;
if ((str = malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1);
}
strcpy(str, "Hello");
printf("String is %s\n", str);
free(str);
return 0;
}