指针相当于一个内存单元来说的指的是单元的地址,该单元的内容里面存放的是数据。
在C语言,允许用指针变量来存放指针。因此,一个指针变量的值就是某个内存单元的地址或者称为某个内存单元的指针。
在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。
有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
指针变量是存放一个内存地址的变量,不同于其他类型变量,它是专门用来存放内存地址的,也称为地址变量。
定义指针变量的一般形式为:类型说明符*变量名;
类型说明符表示指针变量所指向变量的数据类型;
表示这是一个指针变量;
变量名表示定义的指针变量名,其值是一个地址。
通过赋值语句初始化指针变量
对指针进行初始化时常用的有以下几种方式:
表达式 | 说明 |
---|---|
int *p = NULL | NULL或空指针常量 |
int i = 3; int *ip = &i; | 取一个对象的地址然后赋给一个指针 |
long *p = (long *)10; | 将一个指针常量赋给一个指针 |
char ary[100]; char *cp = ary; | 将一个T类型数组的名字赋给一个相同类型的指针 |
int i = 3; int *ip = &i;int **pp = &ip; | 将一个指针的地址赋给一个指针 |
char *cp = “hello,指针”; | 将一个字符串常量赋给一个字符指针 |
字符串指针指向的是一个字符串。
❤️正确用法:
#include
int main()
{
char*string="hello,指针!";
printf("%s\n",string);
return 0;
}
❤️分析函数指针变量不能进行算术运算,这是与整数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。
(计算两个数字大小,输出大的值。):
#include
int max(int a,int b)
{
if(a>b){
return a;
}
else{
return b;
}
}
int main(){
int (*pomax)(int,int);
int x,y,z;
pomax=max;
printf("input two number:\n");
scanf("%d%d",&x,&y);
z=(*pomax)(x,y);
printf("%d,%d",x,y);
printf("maxnum=%d",z);
return 0;
}
C语言中指针初始化是指给所定义的指针变量赋予初始值。指针变量在被创建后,如果不被赋值,他的缺省值是随机的,它的指向是不明确的,这样的指针形象地被称为“野指针”。野指针是很危险的,容易造成程序出错,而且程序本身无法判断指针指向是否合法。
养成一个好习惯,在定义一个指针后,直接赋予NULL空值,或者一些其他的数值。毕竟系统是无法提示你的,只能牢记!