C语言---C指针+ASCII码

发布于:2024-06-25 ⋅ 阅读:(127) ⋅ 点赞:(0)

内存地址:内存中每个字节单位都有一个编号(一般用十六进制表示)

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

int *p; //定义了一个指针变量p,指向的数据是int类型的。

访问指针所指向空间的内容用取内容运算符*
&:取地址符:取变量的地址

*:取内容符:取地址里面存放的内容
*&a=a;//*和&是互逆运算

&*a//错误(因为运算符优先级)

普通变量赋值

#include <stdlib.h>
int main()
{
    int a = 5;
    int *p = &a;
    char c='v';
    char *q=&c;
    printf("%p %p\n", p, &a);//p为a的地址
    printf("%p %p\n",q,&c);//q为c的地址
    printf("%d %d\n",a,*p);//*p是取地址中的值
    printf("%c %c\n",c,*q);//*q取地址中的值

    printf("Hello, World");
    return(0);
}

注意:指针变量使用前不仅要定义,还要初始化。未初始化的指针变量不能随便使用,不然可能会产生野指针。

通过改变指针指向,改变值

	int a=10;
    int *p=&a;
    int *q=p;
    printf("%d %d %d\n",a,*p,*q);//10 10 10
    *q=20;//通过指针改变变量a的值
    printf("%d %d %d\n",a,*p,*q);//20 20 20

数组

在这里插入图片描述

1.数组的首地址赋值给指针变量

char s[10]="hello";
char *p = s;
int arr[5]={1,2,3,4,5};
int *q=arr;
printf("%c\n",*p);//h
printf("%d\n",*q);//1

2.指针加减操作其实就是让指针向前向后移动
(1)char 移动1

	char str[32]="hello";
    char *p=str;
    printf("%c\n",*p);//h
    p++;
    printf("%c\n",*p);//e
    p--;
    printf("%c\n",*p);//h

(2)int 移动4
double 移动 8
偏移了多少字节=n*sizeof(数据类型)

char str[32]="hello";
    int *p=str;
    printf("%c\n",*p);//h
    p++;
    printf("%c\n",*p);//o
    p--;
    printf("%c\n",*p);//h

运算方法
(1)++和*都是单目运算符

(2)单目运算符从右向左运算

(3)++在前是先移动再取值,++在后是先取值再移动。

    int x[] = {10, 20, 30};
int *px = x;
printf("%d,", ++*px);//11
printf("%d\n%d", *px,x[0]);//11 

这个++*px把数组里的值给改了

int x[] = {10, 20, 30};
int *px = x;
printf("%d,", ++*px);//11
printf("%d\n", *px); //11
px = x;
printf("%d,", (*px)++);//11  先取值再+1,所以直接打印x[0]的值,然后再x[0]=11+1=12
printf("%d\n", *px);//12
px = x+1;
printf("%d,", *px++);//20 先取值再移位
printf("%d\n", *px);//30
px = x+1;
printf("%d,", *++px);//30 先移位再取值
printf("%d\n", *px);//30

二维数组

int a[2][3]={1,2,3,4,5,6};

a是数组名,表示第一行的首地址。

a+1表示第二行的首地址,以此类推。

在a前面加*,表示将行地址降级称为列地址。

*a;//第一行第一列的地址

*a+1;//第一行第二列的地址

*(a+1);//第二行第一列的地址

*(a+1)+1;//第二行第二列的地址
原文链接:https://blog.csdn.net/weixin_43624626/article/details/130715839
在这里插入图片描述

二级指针

存放指针的地址

int a = 10;

int *p = &a;

int **q = &p;

数组指针

本质还是指针,指向的是数组(又称为行指针)
存储类型 数据类型(* 指针变量名)[列数];

例如:

int a[2][3]={1,2,3,4,5,6};

int (*p)[3]=a;

p可以代替进行元素访问,但本质不同,p是指针变量,a是地址常量。

把p进行运算的时候,例题中情况要3个单位3个单位进行运算。

指针数组

若干个具有相同存储类型和数据类型的指针变量构成的集合。其本质是数组,里面存放的是指针
存储类型 数据类型 *数组名[元素个数];

指针数组名表示的是该指针数组的首地址。
例如:

int a=10,b=20,c=30;
int *p[3]={&a,&b,&c};

访问b的值:
*p[1]
**(p+1)

访问b的地址:
p[1]
*(p+1)

ASCII

A-65
a-97
相差32
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到