一级指针的相关知识梳理

指针格式:

存储类型 数据类型 *指针变量名;

数据类型: 代表指针所指空间存放数据数据类型

int *p; //定义一个指向int类型数据指针变量p

int main(int argc, char const *argv[])
{
    int a[10] = {1, 2, 3, 4, 5};
    int *p = a; //*p变量,a地址常量
    for (int i = 0; i < 10; i++)
        // printf("%d ",*(p+i));
        // printf("%d ",p[i]);
        // printf("%d ",*(a+i));
        printf("%d ", a[i]);
    printf("\n");
    for (int i = 0; i < 10; i++)
        printf("%d ", *p++);
}

注释:常量不可以改变

访问指针所指空间的内容时用取内容运算符*

那么变量p存放的就是a地址q变量存放b的地址

通过运算符*可以访问地址表示空间里面内容

指针操作符和初始化

&:取变量的地址

*:取地址里的内容

*&a = a; //*&运算(可以抵消)

&*a; //错误 (原因:运算符优先级)

2.1初始化:

《1》:将普通变量的地址赋给指针

int a=5;

int *p=&a;

printf("%d%d\n",*p,a);

<2>j将数组的首地址给指针变量

<3>将指针变量里面存放的地址赋给另一个指针

int main()
{
int a=5;
int *p=&a;
int*q=p;
printf("%d %d %d\n",a,*p,*q);
}

指针的运算:

int main(int argc, char const *argv[])
{
    int a[10] = {1, 2, 3, 4, 5, 6,8};
    int *p = a;
    int *q = a + 5;
    printf("%d %ld\n",*(p+5), q - p);
    if(q>p)
    printf("%d ",*(q+1)-*p+2);
    return 0;
}

p+n: 访问高地址方向n数据地址指针指向不改变

p-n: 访问低地址方向n数据地址指针指向改变

指针偏移 字节

偏移了多少字节 = 偏移量*sizeof(数据类型)

两个地址之间= 两个地址之间相隔元素的个数

p-q = 直接按相隔元素个数

关系运算:

注释:比较地址的高低,所以应该在同一个数组里进行比较

int x[] = {10, 20, 30};
int *px = x;
printf("%d,", ++*px); //11 先*px=*px+1=10+1=11; 再执行printf
printf("%d\n", *px);  //11
px = x;
printf("%d,", (*px)++); //11,执行printf,再*px=*px+1=11+1=12
printf("%d\n", *px); //12
px = x+1;
printf("%d,", *px++); //20,执行printf,再px=px+1指向了30
printf("%d\n", *px);  //30
px = x+1;
printf("%d,", *++px); //30,先px=px+1 指向了30, 再printf
printf("%d\n", *px); //30

回文数的判断:

int main(int argc, char const *argv[])
{
   char a[10];
   gets(a);
   int flag;//标志位设立
   char *q=a,*p=a+strlen(a)-1;//头和尾
  for(int i=0;i<strlen(a);i++)//遍历
 // while(a)//a!='\0'
   {
    if(*q==*p)
    {
        q++;
        p--;
       flag=1;
   }
   else{
    flag=0;
   }
}
if(flag!=1)
    {
        printf("n\n");
    }
    else{
        printf("y\n");
    }
}

指针大小的计算:(sizeof)

64位:8

32位:4

将字符串转换为整形数字输出:

int main(int argc, char const *argv[])
{
    char a[20];
    gets(a);
    char *p=a;
    int sum=0;//定义存放变量存放转换后的值
   // for(int i=0;i<strlen(a);i++)
   while(*p!='\0')
    {
        if(*p>='0'&&*p<='9')
        {
            sum=sum*10+(*(p++)-'0');
           // p++;
         //printf("%d\n",sum);
        }
    }
   printf("sum=%d\n",sum);
}
指针修饰:

<1>修饰普通变量

局部变量:

int main()
{
const int a=5;
char *p=&a;
*p=20;//通过指针修改a的值
}

全局变量:

注释:当修饰全局变量时,修饰的值不会发生改变,不能修改,否则报段错误

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值