首页 > 其他分享 >C语言第五篇-指针

C语言第五篇-指针

时间:2024-05-14 22:41:21浏览次数:24  
标签:arr main int C语言 char 第五篇 include 指针

什么是指针

  1. 指针是内存中一个最小单元的编号,也就是地址
  2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量

指针变量

我们可以通过&(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中,这个
变量就是指针变量

#include <stdio.h>
int main() {
    printf("%d\n",sizeof(char *));//结果位8因为我的计算机是64位操作系统
    printf("%d\n",sizeof(short *));
    printf("%d\n",sizeof(int *));
    printf("%d\n",sizeof(double *));
    return 0;
}

指针和指针类型

char  *pc = NULL;
int   *pi = NULL;
short *ps = NULL;
long  *pl = NULL;
float *pf = NULL;
double *pd = NULL;

char* 类型的指针是为了存放 char 类型变量的地址。
short* 类型的指针是为了存放 short 类型变量的地址。
int* 类型的指针是为了存放 int 类型变量的地址。
指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。
char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节

指针做加法

#include <stdio.h>
int main() {
    int n = 10;
    int * pn = &n;//传递地址然后进行加法操作
    *pn = *pn+1;
    printf("%d\n",n);
}

指针的解引用

#include <stdio.h>
int main() {
    int arr[10]={0};
    int * parr = arr;
    for (int i=0;i<10;i++){
        parr[i]=i+1;
    }
    for(int j=0;j<10;j++){
        printf("%d\n",arr[j]);
    }
}

野指针

#include <stdio.h>
 
int main()
{                //这里p为野指针
  int* p;  //p是一个局部变量(在{}里的变量为局部变量),局部变量不初始化默认是随机值。
  *p = 10;  //非法访问内存。
 
return 0;
}

数组名其实就是一个指针

#include<stdio.h>
int main(){
    int arr[10]={0};
    int * parr = arr;//将数组传递给一个指针变量

    for(int i=0;i<10;i++){
        parr[i]=i+1;
    }
    for(int j=0;j<10;j++){
        printf("%d\n",arr[j]);
    }
    return 0;
}

换种写法而已

#include <stdio.h>
int main(){

    int arr[10]={};
    int * p=arr;
    for (int i=0;i<10;i++){
        *(p+i)=i+1;//另外一种写法而已
    }
    for(int j=0;j<10;j++){
        printf("%d\n",arr[j]);
    }

    return 0;
}

字符指针

#include <stdio.h>
int main(){
    char ch = 'q';
    char *pc = &ch;
    *pc = 'w';
    printf("%c\n",ch);
    return 0;
}

字符指针使用和遍历

#include <stdio.h>
#include<string.h>
int main(){
    char * str = "sdfsfdsfsd";
    int strLen = strlen(str);
    for (int j=0;j<strLen;j++){
        printf("%c\n",str[j]);
    }
}

函数操作

一维数组作为参数传递-必须有数组大小

void test(int arr[],int size){
    for(int i=0;i<size;i++){
        printf("%d\n",arr[i]);
    }
}
int main(){
    int arr[]={1,2,3,4,5,6,9};
    int size = sizeof(arr)/sizeof(arr[0]);
    test(arr,size);
}

二维数组传参

#include <stdio.h>
#include<string.h>

void test(int (*arr)[3]){
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++){
            printf("j=%d\t",arr[i][j]);
        }
        printf("%\n");
    }
}
int main(){
    int arr[2][3]={{1,2,3},{4,5,6}};//二维数组第一维度里面其实就是地址

    test(arr);
}

三维数组传递

#include <stdio.h>
void test( int (*arr)[2][2]){//三维数组传递
    for (int i=0;i<3;i++){
        for(int j=0;j<2;j++){
            for(int m=0;m<2;m++){
                printf("%d\n",arr[i][j][m]);
            }
        }
    }
}
int main(){
    int arr[3][2][2]={{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}};
    test(arr);
    return 0;
}
如果多为数组类似传递

数组使用指针作为函数参数传递

函数传递使用一级指针大小需要传递

#include <stdio.h>
#include<string.h>
void test1(int * arr){
    for(int j=0;j<10;j++){
        printf("%d\n",arr[j]);
    }
}
int main(){
    int arr[10]={0};
    for(int i=0;i<10;i++){
        arr[i]=i+1;
    }
    test1(arr);
}

标签:arr,main,int,C语言,char,第五篇,include,指针
From: https://www.cnblogs.com/zh718594493/p/18187772

相关文章

  • 第五篇scrum冲刺
    作业所属课程软工2024作业要求自我介绍+软工5问作业目标学习使用一些好用实用的工具。熟悉作业提交的方法和格式。督促我翻阅课本。明确自己的学习方向查找到可用urlhttp://t.weather.sojson.com/api/weather/city/+对应城市编号即可获得天气预报,信息以Json数......
  • 实验4 C语言数组应用编程
    实验任务1task1_11#include<stdio.h>2#defineN434voidtest1(){5inta[N]={1,9,8,4};6inti;78//输出数组a占用的内存字节数9printf("sizeof(a)=%d\n",sizeof(a));1011//输出int类型数组a中每个元......
  • C语言输出函数介绍
    一,printf()函数  printf()是标准输出函数。printf()函数打印数据指令的指令要与待打印数据的类型匹配。如打印整数时用%d,打印字符时用%c。如果与之不匹配打印的结果会于想要的结果不符。打印使用的如%f,%d,%c被称为转换说明。下列是ANSIC标准常见的转换说明。    转......
  • c语言程序实验————实验报告八
    c语言程序实验————实验报告八实验项目名称:实验报告8字符串处理函数实验项目类型:验证性实验日期:2024年5月9日一、实验目的1.熟练掌握数组的定义格式和数组元素的表示方法;2.熟悉数组的初始化方法和赋值方法;3.掌握字符数组存放字符串的方法和字符串函数的使用;4.......
  • 加练日记2-二分,双指针,排序
    二分模板 #include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constllMOD=998244353;lln,m;constllN=2e5+9;lla[N];llv[N];intf(llmid){ llans=0,pre=-1e9; for(inti=1;i<=n;i++){ if(a[i]-pre>=mid)ans++,pre=a[i......
  • C语言第四篇-操作符
    算术操作符#include<stdio.h>intmain(){inta=8;intb=4;intc=0;intd=0;c=a/b;//8/4=2;8/2.0=4.0;d=a%b;//8.0%2是错误的,%两端必须为整数;return0;}移位操作符<<左移操作符:将一个数的二进制位全部左移若干位。‘>>右移操作......
  • 蓝桥杯-递增三元组(三种解法,二分, 双指针, 前缀和)
    给定三个整数数组A=[A1,A2,…AN],B=[B1,B2,…BN],C=[C1,C2,…CN],请你统计有多少个三元组(i,j,k)满足:1≤i,j,k≤NAi<Bj<Ck输入格式第一行包含一个整数N。第二行包含N个整数A1,A2,…AN。第三行包含N个整数B1,B2,…BN。第四行包含N个整数C1,C2,…CN。输出格......
  • C语言实现获取BMP文件信息
    通过命令行传递文件路径参数,输出BMP的width、height、size1、从BMP的结构信息可知,文件大小、图片宽度、图片高度均占据4个字节,所以只需要打开文件读取对应位置的信息并打印即可。2、为了提高可移植性,可以定义结构体,保持和BMP文件结构一致,这样可以一次性读取保存,方便后续调用。但......
  • 项目冲刺——第五篇Scrum冲刺博客
    作业所属课程所属课程作业要求作业要求作业目标总结第四天的敏捷开发,安排好第五天敏捷开发冲刺一、站立式会议1、会议图片2、昨天已完成的内容成员任务肖杨、梁丽贤完成贴子发布模块设计黄诃华、欧文杰完成帖子发布接口姚佳如、李慧娣复......
  • 以 LwIP 分析基于C语言的代码文件组织
    转载自:https://blog.csdn.net/jiangjunjie_2005/article/details/22991385时间:2014-04-05  嵌入式系统一般用C语言来实现,当代码规模增大后经常出现各种问题:如何将众多的源文件放置在不同的目录中?头文件.h和源文件.c如何组织?说明文档和源文件如何存放?还要考虑移植。下面以Lw......