C语言之指针基础

C语言之指针基础

1.指针的定义

指针的实质是变量变量,因此指针叫做指针变量
指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

2.指针的理解和使用

#include <stdio.h>

int main(void)
{
	int a=6;
	
	//指针的定义
	int  *p1;		//定义指针变量p1,p1指向一个存有int类型数据的地址
	char *p2;		//定义指针变量p2,p2指向一个存有char类型数据的地址
	short  *p3;		//定义指针变量p3,p3指向一个存有short类型数据的地址
	double *p4;	//定义指针变量p4,p4指向一个存有double类型数据的地址
	
	//指针与变量地址关联
	p1=&a;   		//p1与a的地址关联起来,p1指向a
	
	//指针解引用
	*p1=3;   		//(*p)就表示p1指向的地址存的值,这里即为a存的值
}

使用步骤:
(1). 指针定义
(2). 指针与变量地址关联
(3). 指针解引用

3.与指针有关的符号

3.1指针定义使用过程中的符号

#include <stdio.h>

int main(void)
{
	int a=6,b=0;
	int *p1;  	 	//*表示定义了一个指针,这个指针的名字叫p1
	p1=&a;  		//&是取地址符,表示取变量a的地址,p1实质是地址,&a也是地址,因此此关联正确
	b=*P1;  		//这里的*是解引用,表示指针p1指向的变量存储的值,上一步p1与a的地址关联起来了,因此*p1的值为6
}

3.2 a,a[0] ,&a ,&a[0]符号的含义

#include <stdio.h>

int main(void)
{
	int a[5];
}

如上述定义,讨论a a[0] &a &a[0]符号的含义

必备理论:C语言中的左值与右值https://blog.csdn.net/m0_46672658/article/details/115384413

(1)a就是数组名。
a做左值时表示整个数组的所有空间,又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值;
a做右值表示数组首元素的首地址。a做右值等同于&a[0];

(2)a[0]表示数组的首元素。
a[0]做左值时表示数组第0个元素对应的内存空间;
a[0]做右值时表示数组第0个元素的值。

(3)&a就是数组名a取地址,是数组的地址。
&a不能做左值;
&a做右值时表示整个数组的首地址。

(4)&a[0]是数组首元素的首地址。
&a[0]表示数组首元素首地址,是个常量所以不能做左值;
&a[0]做右值时就表示数组首元素首地址的值,等同于a做右值。做右值时&a[0]等同于a。

4.指针与数组

指针访问数组的方法

#include <stdio.h>

int main(void)
{
	int a[4]={1,2,3,4};
	int *p;
	p=a;
	//p=&a[0];
	//p=&a;     //报警告assignment from incompatible //pointer type [enabled by default]

	printf("a[0]=%d\n",*p);
	printf("a[1]=%d\n",*(p+1));
	printf("a[2]=%d\n",*(p+2));
	printf("a[3]=%d\n",*(p+3));
	printf("a[4]=%d\n",*(p+4));
	
	return 0;
}

5.指针与传参

函数传参时,形参是可以用数组的,函数形参是数组时,实际传递是不是整个数组,而是数组的首元素首地址。即函数传参用数组来传,等价于传递的是指针(指针指向数组的首元素首地址)。

以上内容源于朱有鹏《c语言内核深度解析》学习笔记和网络,如有侵权,请告知删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值