C语言-指针
大家都听过“谈虎色变“这个成语故事,咱们今天讲的虽然不是老虎,但一提到指针,大家可以能会害怕起来。在学习中,也经常听到同学们说C语言除了指针,其他的我都会。我觉得吧如果指针你不弄懂的话,C语言就不算会。那么接下来我们就来了解一下,什么是指针
大家先看一道题:
#include <stdio.h>
void change(int);
int main()
{
int a = 90;
change(a);
printf("a=%d\n", a);
return 0;
}
void change(int n)
{
n = 10;
}
那么,我为大家画一个图,就会理解
大家觉得,a打印出来的值是多少呢?可能以前学过其他编程语言的知道,a=90,值传递嘛,对吧。那如果我硬是要去修改a的数值呢?所以这个时候,我们就要用到指针。
接下来,我们言归正传
指针是C语言中最强大的工具之一,它也是最容易令人困惑的主题,所以一定要在开始时正确理解。
请看下面的语句:
int number = 5;
这条语句会分配一块内存来存储一个整数,使用number名称可以访问这个整数。值5存储在这个区域中。计算机用一个地址引用这个区域。存储这个数据的地址取决于所使用的计算机、操作系统和编译器。在源程序中,这个变量是固定不变的,但地址在不同的系统上是不同的。
可以存储地址的变量称为指针(pointers),存储在指针中的地址通常是另外一个变量,如下图,指针pnumber含有另外一个变量number的地址,变量number是一个值为99的整数变量。存储在pnumber中的地址是number第一个字节的地址。
指针的基本使用
变量类型 变量名;
格式:变量类型 *变量名;
指针变量只能存储地址
//定义了一个指针变量p;
int *p; //指针变量占8个字节
int a = 90;
p = &a; //指针变量p指向了变量a
*p =10;
注:指针的作用-能够根据一个地址值,访问对应的存储空间。
int *p; //int 就意味着指针变量p,只能指向整型变量
使用注意:
① 指针变量的数据类型要和它指向的变量数据类型一致
② 指针变量只能存储地址
③ 指针变量未经过初始化,不要拿来间接访问其他存储空间
demo:
int a = 10;
int *p;
p = &a;
//可以合并成
int *p = &a;
错误写法:
*p = &a;
正确写法:
p = &a;
定义指针变量时的*仅仅是一个象征,没有其它特殊含义
*p = 20; //这个时候的*的作用是,访问指向变量p指向的存储地址
指针和数组
数组名就是数组的地址,也是数组首元素的地址
demo:
int ages[5] = { 10, 9 ,8 67, 54};
int *p = &ages[0];
for(int i = 0; i < 5; i++)
{
printf("ages[%d] = %d\n",i,*(p+1));
}
//以上是利用指针间隔访问数组元素
printf("%d\n",p[2]);// p[2]是指针当作数组访问元素
指针与字符串
char name[] = "itcast"; //放在栈中,可以修改 name[0] = 'T';
char *name2 = "itcast"; //放在常量区,不可修改
char name[] = "itcast"; // 'i' + 't' + 'c' + 'a' + 's' + 't' + '\0';
char *name2 = "itcast"; //指针会指向字符串的首字符
注:各位技术大牛,如果发现有错误,请将指正,本人将及时更改。