指针
1. 定义一个指针变量p,类型是int* ,指向一个int型的数据
int *p
涉及的指针符号:* &
p = &a;//指针的绑定
*p = 23;//指针的解引用,*p得到了变量(a)
2. 定义指针的同时并且初始化
int *p1 = &a; // == int *p, a; p = &a
3. 指针的运算,就是加减指针所指向的变量类型所占字节大小
同一数组中,两指针相减可得出元素的个数。如果是两个数组的指针相减,将导致未定义的结果
int arr[5] = {
1, 3, 5, 7, 9};
int *p = arr;
int *q = arr+5;//指向9的后一位
int ret=q-p;//元素个数
4.野指针
int *p;
危害:1、直接指向内核区 2、指向可用也没有别的数据的区域 3、可用但有别的数据
//NULL专用于指针的初始化(写0)
int *p = NULL;
6.指针与函数值传递
void fun(int *p)//可以不需要返回值
{
*p=1;//直接修改main中变量
}
int main(void)
{
int a=0;
fun(&a);//传入地址
return 0;
}
7.数组指针与函数传递
#include<stdio.h>
int func(int *p,int lenth)//传入数组元素个数,保证函数接口明确,可以正确调用
{
...
}
int main(void)
{
int arr[3]={
1,2,3};
func(arr,3);//数组名作为指针传递
}
8.数组内的指针与解引用
#include<stdio.h>
int main(void)
{
//知识点
//1.*与++有相同的优先级
//2.++后置表示,先传递当前值,完成运算之后再++
int arr[]={
1,3,5,7,9};
int *p=arr;
*p++; //*p、p++
*(p++); //p的值给*,p++
//以上两者相同