//利用指针的两个变量的交换
#include <stdio.h>
void add(int *p1,int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void main()
{
int x = 10; int y = 20;
int *p1 = &x, *p2 = &y;
printf("x==%d,y==%d\n", x, y);
add(&x,&y);
printf("x==%d,y==%d", x, y);
getchar();
}
指针常量:指针常量是指指针所指向的位置不能改变,即指针本身是一个常量,但是指针所指向的内容可以改变。
数据类型 * const 指针变量=变量名;
修饰符const与指针变量紧邻,说明指针变量不允许修改,既然指针变量的值不能修改,所以一定要在定义的时候给定初值(指向一个确定存在的地方)
常量指针:具有只能够读取内存中数据,却不能够修改内存中数据的属性的指针,称为指向常量的指针;
const 数据类型 *指针变量=变量名;
或者 数据类型 const * 指针变量=变量名;
常量指针指向常量:位置不能改变,是一个常量,不能修改数据,能读取内存数据。
const 数据类型 * const 指针变量=变量名;
数据类型 const *const 指针变量=变量名;
//比较不能数据类型的变化
/*
void f(int a[], long b[], short c[], char d[])
{
for (int i = 0; i < 10; i++) {
printf("%p %p %p %p", a++, b++, c++, b++);
getchar();
}
}
void main()
{
int a[10];
long b[10];
short c[10];
char d[10];
f(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;
}
函数名字realloc
原型:extern void *realloc(void *mem_address, unsigned int newsize);
语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。新的大小一定要大于原来的大小不然的话会导致数据丢失!
功能:先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,
如果空间不够,先按照newsize指定的大小分配空间,
将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,
同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
返回值:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
注意:这里原始内存中的数据还是保持不变的。当内存不再使用时,
应使用free()函数将内存块释放。
程序例:
#include<stdio.h> #include<stdlib.h>
int main()
{ int i; int *pn=(int *)malloc(5*sizeof(int)); printf("%p\n",pn);
for(i=0;i<5;i++) scanf("%d",&pn[i]);
pn=(int *)realloc(pn,10*sizeof(int));
printf("%p\n",pn);
for(i=0;i<5;i++)
printf("%3d",pn[i]);
printf("\n");