博客主页:https://blog.csdn.net/weixin_46094737?type=blog
欢迎评论⭐留言 如有错误敬请指正!
本文由小学生廉原创,首发于 CSDN
未来很长,值得我们全力奔赴更美好的生活!
指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。就像其他变量或常量一样,必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:
#includeint main() { int *num_01; int a=10010; num_01=&a; printf("指针num_01的值为:%dn",*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指针与数组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("%dn",a); printf("%dn",b); printf("地址交换前:n"); printf("%pn",pa); printf("%pn",pb); p=pa; pa=pb; pb=p; printf("地址交换后:n"); printf("%pn",pa); printf("%pn",pb); temp(&a,&b);//使用函数交换 printf("数值交换后:n"); printf("%dn",a); printf("%dn",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 ;
#includeint main() { int *p; int arr[5]={1,2,3,4,5}; int i; p=&arr[0];//指向首地址arr[0] printf("数组元素首地址的值为:%dn",*p); p=arr;//也可以这样定义指针p指向的数组首地址 printf("指针p的地址为:%#pn",p); for(i=0;i<5;i++) { printf("%d ",*p); p++; } return 0; }



