前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言指针基础知识【C语言学习笔记】

C语言指针基础知识【C语言学习笔记】

作者头像
岳泽以
发布2022-10-26 16:10:11
6190
发布2022-10-26 16:10:11
举报
文章被收录于专栏:岳泽以博客

指针含义

变量在内存中的地址。通过地址找到变量所在的内存空间。

例如:int a =10;

a表示变量的值,该值为10,&a表示该变量的内存地址。

“直接访问”和“间接访问”

直接访问:直接从某个变量的地址空间中访问该内存空间对应的内存。

间接访问:某个变量i的地址存放到另一个变量j中,通过访问变量j找到变量i的地址,从而访问变量i的值。

指针变量

用来专门存放另一个变量地址的变量。

整型变量、实型变量--->值

指针变量中存放的是另一个变量的内存地址。

指针变量的一般形式

类型名 *指针变量名;

例如:int *p

int表示指针变量的类型,指针变量的类型用来存放另一个int类型变量的地址。也就是指针变量p指向另一个int类型的变量。

*表示该变量为指针变量。

p表示变量的地址。

*p表示该地址指向的值。

代码语言:javascript
复制
#include<stdio.h> 
int main(){
    int a=20;
    int *p,*q;  //int 类型 
    p=&a; //p的地址=a的地址
    q=&a; //q的地址=a的地址
    *p=30; //p的地址指向的值=30
    printf("a(addr)=%d\n",&a);  //a的地址
    printf("p=%d\n",p);  //p的地址
    printf("a=%d\n",a);  //a的值
    printf("*p=%d\n",*p); //指针变量p的值
    printf("q=%d\n",*q);  //指针变量q的值
    return 0; 
}

注意知识点:

在定义指针变量时,必须指定指针变量的类型,并且一个指针变量只能指向同类型的变量,不能一会指向整型,一会指向实数类型变量。

代码语言:javascript
复制
int main(){
int a=100;
float b=12.3f;
int *p;
p=&b;  //错误!!!
return 0;
}

在定义指针变量时,要给指针变量赋初值,也就是将这个指针变量指向一个确定的变量才能对指针变量指向的值进行操作。

代码语言:javascript
复制
int main(){
int a = 200;
int *p;
*p = 100;//野指针,错误
printf("%d",*p);
return 0;
}

不能对指针变量直接赋一个常量内存地址。

代码语言:javascript
复制
int main(){
int a = 200;
int *p;
p=1000;//错误
printf("%d",*p);
return 0;
}

不能将一个变量的地址赋值给一个指针所指向的值。

代码语言:javascript
复制
int main(){
int a = 200;
int *p;
*p = &a;//错误
printf("%d",*p);
return 0;
}

特例:

代码语言:javascript
复制
int main(){
int a = 200;
//int*  p= &a;
int *p;
p = &a;
printf("%d",*p);
return 0;
}

指针变量作为函数的参数

当函数的形式参数为指针类型时,作用是将一个变量的地址传递到函数中。

例题:输入a和b两个数,按照由大到小的顺序输出a和b。(用函数和指针实现)

代码语言:javascript
复制
#include<stdio.h> 
int main(){
    void swap(int *,int *);
    int a=10,b=20;
    if(a<b)swap(&a,&b);
    printf("%d %d",a,b);
    return 0; 
}
void swap(int *a,int *b){
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}

如果函数的形式参数为int a[]int *a,形式参数a是用来接收地址的,如果函数的形式参数为int a,形参a是用来接收值的。

代码语言:javascript
复制
#include<stdio.h> 
int main(){
    void swap(int a[10000],int b[5000]);
    int a=10,b=20;
    if(a<b)swap(&a,&b);
    printf("%d %d",a,b);
    return 0; 
}
void swap(int a[],int b[]){
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}

总结:

  1. 函数可以通过return返回一个值。
  2. 如果在定义函数时,形参为int *aint a[],可以“返回”该指针指向的值。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 04 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 指针含义
  • “直接访问”和“间接访问”
  • 指针变量
    • 指针变量的一般形式
      • 注意知识点:
        • 指针变量作为函数的参数
          • 总结:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档