C语言指针讲解-------进阶篇(上篇)

目录

一.指针简要介绍

1.1指针的定义

1.2间接运算符: * 

1.3代码演示

代码注释 

二.字符指针 

三.指针数组


一.指针简要介绍

内存被划分成一个个的内存单元,每个内存单元的大小是一个字节;每个字节的内存单元都有一个编号,这个编号就是地址,地址在C语言中被称为指针

地址要存储的话被存在指针变量中,每个内存单元都有一个唯一的地址标识

ptr=&a;

把 ptr 的地址赋给 a ;我们说 ptr 指向 a 。ptr 和 &a 的区别是 ptr 是变量,而 &a 是常量

1.1指针的定义

指针变量定义的一般形式为:

基类型 *指针变量名;

例如 :     int *a   float *b;

“*” 表示该变量的类型为指针类型。指针变量名为 i 和 j,而不是 *i 和 *j

在定义指针变量时必须指定其基类型 ; 指针变量的“基类型”用来指定该指针变量可以指向的变量的类型。比如“int*i;”表示 i 只可以指向 int 型变量;又比如“float*j;”表示 j 只可以指向 float 型变量

1.2间接运算符: * 

间接运算符也叫解引用运算符

ptr=&ban;
val=&ptr;

上述语句放在一起相当于 val = &ban;

由此可见,使用地址和间接运算符可以间接完成上面这条语句的功能,这也是"间接运算符"名字的由来

地址运算符 &
一般解释 后跟一个变量名时,&给出该变量的地址
例如 &nurse表示 : 变量nurse的地址
间接(或解引用)操作符 *
一般解释 后跟一个指针名或地址时,* 给出存储在指针指向地址上的值
例如

nurse=32;    

ptr=&nurse;    // 指向nurse的指针

val=*ptr;         //把ptr指向的地址上的值赋给val

1.3代码演示

#include
int main()
{
	int nurse = 32;
	int* ptr;
	ptr= &nurse;
	int val;
	val = *ptr;
	printf("%d", val);
	return 0;
}
代码注释 


    int nurse = 32;//定义一个普通变量
    int* ptr;            //定义一个指针变量
    ptr= &nurse;    //将nures的地址保存在ptr中
    int val;            
    val = *ptr;        //把ptr指向的地址上的值赋给val

右边的图片就是不正确的书写方式

C语言指针讲解-------进阶篇(上篇)_第1张图片       C语言指针讲解-------进阶篇(上篇)_第2张图片

         

二.字符指针 

C语言指针讲解-------进阶篇(上篇)_第3张图片

例如

看下面这个代码

输出结果为:

str1 and str2 are not same
str3 and str4 are same

#include 
int main()
{
	char str1[] = "hello bit.";
	char str2[] = "hello bit.";
	const char* str3 = "hello bit.";
	const char* str4 = "hello bit.";
	if (str1 == str2)
		printf("str1 and str2 are same\n");
	else
		printf("str1 and str2 are not same\n");
	if (str3 == str4)
		printf("str3 and str4 are same\n");
	else
		printf("str3 and str4 are not same\n");
	return 0;
}

解释如下:str1和str2虽然字符串一样,但是是两个数组,两个不同的空间,所以指向的地址不一样

                str3和str4是指向了同一个地址

C语言指针讲解-------进阶篇(上篇)_第4张图片

三.指针数组

存放指针的数组,存放在数组的元素都是指针类型的

指针数组是数组,可以使用指针数组模拟一个二维数组

C语言指针讲解-------进阶篇(上篇)_第5张图片      C语言指针讲解-------进阶篇(上篇)_第6张图片

新人博主,如果有地方解释的不对或者不清晰,麻烦大佬们海涵,如果可以麻烦从评论区指出,我一定会加以修改,万分感谢

最后麻烦大佬们动一下发财的小手一键三连,千万分感谢

你可能感兴趣的:(c语言,开发语言)