C语言初级阶段7——指针3

指针数组:描述的是一个数组,存储的是指针

#include<stdio.h>
void fun(int(*arr)[2])
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%d\t", arr[i][j]);
}
printf("\n");
}
}
int main() { int a = 3, b = 2, c = 1;
int* p2 = &a, * p3 = &b, * p4 = &c;
int *p1[3] = { p2,p3,p4 };
int arr1[2][2] = {
1,2,
3,4,
};
fun(arr1);
return 0;
}

数组指针:是一个指针,指向的是一个数组(二维数组起)

#include<stdio.h>
int main() {
int arr[3][3]
{
1,2,3,
4,5,6,
7,8,9
};
int(*p)[3] = arr;//这个[3]是列,行不用写。
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d\t", arr[i][j]);
}
printf("\n");
}
return 0;
}

多级指针

int c;
int *a=&c;//一级指针
int **a1 = &a;//二级指针
int ***a2 = &a1;//三级指针
int ****a3 = &a2;//四级指针
int *****a3 = &a3;//五级指针

指针的偏移

#include<stdio.h>
int main()
{
int n[3][4]
{
{1,2,3,4},
{8,7,6,5},
{9,10,11,12},
};
int(*pn)[4] = n; int* p[3] = { n[1],n[0],n[2] };
int **pp = p;
printf("%d\n", *(*(pp+1) + 2));//两次解引用, 重点:*(pp+1)=pp[1]
printf("%d\n", *((pp[2]) - 3));//*(pp+2)=pp[2]
printf("%p\n", *pp++);
printf("%d\n", *(pp[1] + 2));
printf("%d\n", *p[1]++);
printf("%d\n", *(p[1] + 2));
printf("%d\n", *(p[2] - 3));
const char* str[4] = //VS2022需要在char前面加上const
{
"好好学习,天天向上。",
"学而时习之,不亦说乎!",
"三人行,必有我师。",
"学而不思则罔,思而不学则殆。",
};
for (int i = 0; i < 4; i++)
{
printf("%s\n", str[i]);
}
return 0;
}

内存四区:栈区、静态全局区,堆区,代码区

1.栈区:存储的局部变量系统会自动申请释放内存。

#include<stdio.h>
int main()
{
for (int i = 0; i < 10; i++)
{
int a = 0;
printf("%d\n", a);
a++;
}
return 0;
}

2.堆区:自己手动申请的内存区域,需要我们自己手动释放。

3.静态全局区:存储的静态和全局变量数据,内存只会存在一份,只会初始化一次,在程序执行结束的时候被系统释放。

#include<stdio.h>
int main()
{
for (int i = 0; i < 10; i++)
{
static int a = 0;
printf("%d\n", a);
a++;
}
return 0;
}

4.代码区:存储的是函数等。

C语言初级阶段7——指针3的更多相关文章

  1. Swift3.0语言教程使用指针创建和初始化字符串

    Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...

  2. C语言中的指针数组

    C语言中的指针数组是什么,像 char *a[]={"ddd","dsidd","lll"}; 这里讲一下注意如果我们使用了a也就是首元素的 ...

  3. 【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化

    C 语言中的指针和内存泄漏 http://www.ibm.com/developerworks/cn/aix/library/au-toughgame/ 本文讨论了几种在使用动态内存分配时可以避免的陷 ...

  4. GO语言中的指针

    http://www.tizgrape.com/?p=100 Go语言中的指针语法和C++一脉相承,都是用*作为符号,虽然语法上接近,但是实际差异不小. Go使用var定义变量: var v6 *in ...

  5. 由链表初始化看C语言的二级指针

    先来看C语言创建链表.插入节点和遍历链表的一段代码: #include <stdio.h> #include <stdlib.h> typedef int ElemType; ...

  6. C语言 > 数组和指针

    C语言 数组和指针 const: 关于指针和const需要注意一些规则.首先,把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的. 然而,只能把非const数据的地 ...

  7. C语言结构体指针的引用问题

    在写栈的一个应用时遇见这样的一个问题 SqStack s; s->base = (int*)malloc(sizeof(int)*10); 通过这样一个代码引用的时候,会导致程序出现异常 经过一 ...

  8. Go语言基础之指针

    区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 Go语言中的函数传参都是值拷贝 ...

  9. c语言之函数指针应用

    c语言之函数指针应用 1.函数指针与指针函数 在开始运用函数指针前,我们需要将两个概念即:函数指针与指针函数搞清楚. 函数指针,指明这个一个函数,但返回值为指针类型,语法格式为: 类型名* 函数名A( ...

  10. C语言中的指针笔记

    C语言指针 得到变量的地址 可以使用&运算符找到变量保存在内存中的位置 int x = 1; printf("x的内存地址是"%p\n",&x) %p格式 ...

随机推荐

  1. JupyterNotebook开发介绍

    简单介绍 核心目录在notebook下面,主页面在tempaltes目录下的notebook.html文件,没有用到传统的前端开发技术,还是jquery之类的前端,而且用了非常多的类库,开发环境的搭建 ...

  2. vim多视窗操作

    命令行模式下输入:sp 1.txt 打开新的水平分屏视窗来编辑1.txt 命令行模式下输入:vsp 2.txt 打开新的垂直分屏视窗来编辑2.txt 普通模式下Ctrl+w s 将当前窗口分割成两个水 ...

  3. 初次安装虚拟机和Linux

    --初学Linux记录点滴 使用软件 VMware-Workstation-15.0.4 CentOS-7-x86_64-Minimal-2003.iso 1.首先使用 VMware-Workstat ...

  4. windows11上面打开HEIC文件的有效方法

    今天在传资料的时候,用手机拍了一张照片传到window11,打开时竟然无法打开,顿时有点诧异,仔细看了文件类型(HEIC),可能软件不识别,怎么解决呢? 经过搜索整理尝试了许多方法,没找到一个合适的. ...

  5. android kotlin data class的公共参数解决

    kotlin的 data class 不能简略的继承 另一个 data class(要初始化对应父类的值) 尝试使用 sealed class 解决 sealed class CommonParams ...

  6. SpringCloud组件:搭建Eureka服务注册中心,搭建的时候一定要确保springboot和springCloud的版本对应

    搭建的时候一定要确保springboot和springCloud的版本对应,不然会报下面的错 查看版本对应得地址:https://start.spring.io/actuator/info 改了对应得 ...

  7. vue3.0使用富文本编辑器VueQuill

    1. npm install @vueup/vue-quill@alpha --save 2. 在main.js中全局引入 import { QuillEditor } from '@vueup/vu ...

  8. maven重点分析

    目录 什么是maven pom.xml 约定大于配置 根元素和必要配置 父项目和parent元素 项目构建需要的信息 路径管理 资源管理 详细使用 filtering的使用 怎么理解pom中多个res ...

  9. Word06 黑客技术office真题

    1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分. 2.这一步非常的简单,打开下载素材文件,在[文 ...

  10. chfs共享系统搭建

    手机电脑文件共享搭建(http://iscute.cn/chfs) 1.下载wget http://iscute.cn/tar/chfs/2.0/chfs-linux-amd64-2.0.zip 2. ...