C语言-指针及其相关应用

C语言系列

  • 一.基础
    • 定义指针
  • 二.指针数组
    • 一维指针数组
    • 二维指针数组
    • 指针数组
  • 三.函数调用
  • 四.动态数组
  • 五.结构体与指针
    • 定义
    • 动态内存
    • 函数
    • 其他
  • 六.string里的一些函数
    • `strcpy`
    • `strcat`
    • `strcmp`
    • `strrev `

一.基础

存的内容是地址

变量是值,用&
指针是地址,要*取值
地址是计算机的通货

为什么要引用指针
因为能直接修改地址,根本上解决问题

定义指针

例如:int *p 就定义了一个指针
这里是int * 是一个整体,代表定义的是指针

两个符号 & *
**&**是取地址,用在指针 例:int a;int *p;p=&a,

输出指针时,要用*(取值)
例如:printf("%d",*p)

其余和普通的无区别

二.指针数组

一维指针数组

因为数组就是一串地址
所以,定义一个指针,让其等于等于数组的其实地址
int a[10];int *p
p=a 即完成地址传递
p+1 是地址 p[1]是值。

在写循环时,可以用指针

for(i=0;i<n;i++)
scanf("%d",p+i);

二维指针数组

int (*p)[n] 即是二维数组
int *p[n] 即可,这就像一个一维数组,但每个p[n]又是一个一维数组
*p是行,[n]是列
因此注意,* ( * ( a + i ) + j )=a[i][j]都是值

指针数组实现二维数组更方便

指针数组

即存放指针(地址)的一维数组

三.函数调用

传入 类似与数组,只写起始地址fun(p,n)
函数书写
fun(int *p,int n) 一维
fun(int **p,int n)二维

四.动态数组

int *p;
int n;

1.
p=(int *)calloc(n,sizeof(int));//申请一维(一串)

2.
p=(int **)malloc(n*sizeof(int));//申请二维(一块)
前者在使用时会初始化内存,后者不会

3.(用的少)
p=(int *)realloc(p,xx);//改内存,xx为数值

4.
p=(int *)messet(p,c,sizeof(p))//初始化内存,c为任意值,‘/0’也行
这个函数要声明头文件  在 string.h里

//5.
free(p);//释放内存

五.结构体与指针

struct node
{
int a[10];
char x;
};

定义

struct node a 普通结构体
struct node *p 普通指针结构体
struct node *p[10]指针结构体数组

a.x==p->x
可以用-> 符号代替.来用

动态内存

p=(struct node *)calloc(n,sizeof(struct node));一般申请
p=(struct node **)malloc(n*sizeof(struct node))数组申请
把变量类型替换即可

函数

函数名书写
void func(struct node *p,int n);

传入
func(p.n);

其他

可以定向修改某一项内容
自己给结构体排序,然后用 switch选择

六.string里的一些函数

strcpy

用法:strcpy(s1,s2)
作用:把s2指向的字符串拷贝到s1中去

strcat

用法:strcat(s1,s2)
作用:拼接,s2接s1后面,没有’\0’,手动补

strcmp

用法:strcmp(a,b)
作用:比较两个字符串(按表)
返回值;

比较 返回值
a>b 返回正数
a 返回负数
a=b 返回0

strrev

用法:strrev(s1)
作用:将字符串中的所有字符颠倒次序排列

你可能感兴趣的:(C)