- 指针和指针变量的概念
- 指针与一维数组
- 指针与二维数组
- 字符串的指针和指向字符串的指针变量
- 动态分配内存
- 内存地址──内存中存储单元的编号
(1)计算机硬件系统的内存储器中,拥有大量的存储单元(容量为1字节)。
为了方便管理,必须为每一个存储单元编号,这个编号就是存储单元的“地址”。每个存储单元都有一个惟一的地址。 - 变量地址──系统分配给变量的内存单元的起始地址
注意:内存单元的地址与内存单元中的数据是两个完全不同的概念。 - 指针与指针变量
(1)指针──即地址
一个变量的地址称为该变量的指针。
(2)指针变量──专门用于存储其它变量地址的变量
指针与指针变量的区别,就是变量值与变量的区别。 - 指针变量的定义
如:
int i , j
int *pointer-1 , *pointer-2;
pointer-1=&i;
pointer-2=&j;
定义格式:类型 *指针变量名
说明:(1)用*表示定义的变量为指针变量
(2)指针变量的类型为指针变量指向的地址单元内值的类型。
- 指针变量的引用
main()
{int a=3,*p;
p=&a;
printf(“a=%d,*P=%d”,a,*p);
printf(“a=%x,*p=%x”,&a,p);
}
在非定义语句中出现的*p表示指针变量P所存放的地址中的内容
指针与一维数组- 概念
数组的指针──数组在内存中的起始地址;
数组元素的指针──数组元素在内存中的起始 地址。 - 指向数组的指针变量的定义
与指向普通变量的指针变量的定义方法一样。
例如:
int array[10], *pointer; pointer=array (或&array[0]);
注意:数组名代表数组在内存中的起始地址(与第1个元素的地址相同),所以可以用数组名给指针变量赋值。
3. 通过指针引用数组元素
如果有
“int array[10],pointer=array;则:
(1)pointer+i和array+i都是数组元素array[i]的地址。
(2)(pointer+i)和*(array+i)就是数组元素array[i]。
例如,假设指针变量pointer的当前值为3000,则pointer+1为3000+1*4=3004,而不是3001。 pointer+1指向下一个数组元素地址
- 在
中定义了下面的函数 - malloc( size);
向系统申请大小为size的内存块,把首地址返回。如果申请不成功,返回NULL - free(* p);
释放由malloc() 申请的内存块。p是指向此块的指针
#includemain() {int *p ; p = (int *) malloc(4); scanf("%d",p); printf("%d",*p); free(p); }
一般在写程序需要判断分配内存是否成功,使用如下程序语句:
if(p!=NULL)
……………………//需要执行的语句
else
……………//打印分配内存不成功出错信息
#includemain() {int *p ; p = (int *) malloc(4); If(p!=null) {scanf("%d",p); printf("%d",*p); free(p);} else printf(“没有申请到空间”); }



