c语言指针基本知识要点总结(一)

博客主页:https://blog.csdn.net/weixin_46094737?type=blog
欢迎评论⭐留言  如有错误敬请指正!
本文由小学生廉原创,首发于 CSDN🙉🙉🙉
未来很长,值得我们全力奔赴更美好的生活!💞💞💞 

什么是指针?

指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。就像其他变量或常量一样,必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:

#include <stdio.h>

int main()
{
	int *num_01;
	int a=10010;
	num_01=&a;
	printf("指针num_01的值为:%d\n",*num_01);
	printf("指针num_01的地址为:%#p",*num_01);
	
	return 0;
 } 

在这里,int就是指针的基本类型(int型),它必须是一个有效的 C 数据类型,num01是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。

所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同

指针变量的定义与使用

1.指针变量的定义
指针变量的定义格式为:
类型说明符 *指针变量名 [=初值];
要同时定义两个指针变量:
int *p1=NULL,*p2=NULL;
(NULL是c语言中预定义的空指针关键字,它作为一个特殊的指针,表示不指向任何对象)
定义指针变量时要注意以下几点:
(1)类型说明符表示该指针变量所指向的变量的数据类型。
(2)定义指针变量时,指针变量名前必须有一个“ * ”号,表示定义的变量是指针变量。
(3)指针变量在定义时允许对其初始化。
2.指针变量的使用
两个重要运算符:
(1)&:取地址运算符,如p=&a; 则p为变量a的地址。
(2):指针运算符,后面只能接指针变量。用于访问指针变量所指向的变量。如:*p表示访问指针变量p所指向的变量的内容。

练习使用指针交换两个变量的地址和数值 

#include <stdio.h>
void temp(int *num01,int *num02); 
int main()
{
	int a=100,b=200,c;
	int *p=NULL;
	int *pa=&a;
	int *pb=&b;
	
	printf("数值交换前:\n");
	printf("%d\n",a);
	printf("%d\n",b);
	printf("地址交换前:\n");
	printf("%p\n",pa);
	printf("%p\n",pb); 
	p=pa;
	pa=pb;
	pb=p;
	printf("地址交换后:\n");
	printf("%p\n",pa);
	printf("%p\n",pb);
	temp(&a,&b);//使用函数交换 
	printf("数值交换后:\n");
	printf("%d\n",a);
	printf("%d\n",b);

	return 0; 
} 

void temp(int *num01,int *num02)
{
	int p;
	p=*num01;
	*num01=*num02;
	*num02=p; 	
}

指针与数组

一、指向一维数组元素的指针

c语言数组中的数组元素可以看作相应类型的变量。只要类型匹配,就可以定义一个指针变量,让这个变量存储数组中数组元素的地址,则该指针便指向该数组元素。

int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; //定义a为包含十个数据的数组
int *p; //p为指向整型变量的指针变量
p = &a[0];//把a[0]元素的地址赋给指针变量p
p=a;//与p = &a[0]等效,p的值是数组a首元素的地址

通过指针引用一维数组元素:
1.指向一维数组首元素的指针
注意!!!
(1)可以使用*(p+i)访问元素a[i]。
(2)因为p和a都表示数组首地址,所以p+i也可以记作a+i,指向元素a[i]。
(3)指向数组的指针变量也可以带下标,如:p[i]与*(p+i)和*(a+i)等价,表示元素a[i]。

由此可知:当指针变量p指向一维数组a,即指向一维数组的第一个元素a[0]后,数组的第i+1个元素有以下4种写法:

a[i] ; p[i] ; *(a+i) ; *(p+i) 
a[i]的地址也对应有4种写法:
&a[i] ; &p[i] ;a+i ; p+i ;

#include <stdio.h>

int main()
{
	int *p;
	int arr[5]={1,2,3,4,5};
	int i;
	p=&arr[0];//指向首地址arr[0] 
	printf("数组元素首地址的值为:%d\n",*p);
	p=arr;//也可以这样定义指针p指向的数组首地址 
	printf("指针p的地址为:%#p\n",p);
	for(i=0;i<5;i++)
	{
		printf("%d ",*p);
		p++;
	}
	
	return 0; 
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不掉头发的程序猿_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值