int *p,q;
//与
int* p,q;
//都表示p是一个int类型的指针,而q是一个int整型变量。
指针与const
1.
int* const p=&i;
表示指针是一个常量,不能进行p++此类运算,而*p的值可以改变。
2.
const int *p=&i;
//与
int const* p=&i;
表示不能通过这个指针去修改那个变量(并不能使那个变量成为const)即*p是const。
*p=26//ERROR
i=26//OK
p=&j;//OK
*p++=26//ERROR
好处:当要传递的参数类型比地址大的时候,这是常用的手段:既能用比较少的字节数传递值给参数,又能避免函数对外面的变量的修改。
如何判断两种const:看const是在星号的前面还是在星号的后面
如果在前:不能通过间访运算符改变指针所指变量的值。
如果在后:表示指针是一个常量。
3.
const int a[5]={1,2,3,4};
const 数组,表示数组里每个值都不能修改。
* 是一个单目运算符,优先级比“+”高,比“++”低。
指针相减:表示两指针间存在的变量个数。
动态内存分配
需要的头文件
#include<stdlib.h>
程序举例
利用malloc函数创建数组实现逆序输出
#include<stdio.h>
#include<malloc.h>
int main(){
int* a=NULL;
int number,i;
scanf("%d",&number);
a=(int*)malloc(number*sizeof(int));
for(i=0;i<number;i++){
scanf("%d",&a[i]);
}
for(i=number-1;i>=0;i--){
printf("%d",a[i]);
}
free(a);
return 0;
}
free中只能是malloc出来的值或者是NULL,否则会报错。
常见的关于free函数的问题:
1.申请了妹free
新手:忘记
老手:找不到合适的free时机
将会出现的问题:长时间运行内存逐渐下降。
2.free过了又free
3.地址变过了直接free
纸上得来终觉浅,绝知此事要躬行。
多阅读!!!
多实践!!!