动态内存开辟,指针释放,数组指针,指针数组,杨氏矩阵

简介: 动态内存开辟,指针释放,数组指针,指针数组,杨氏矩阵
#include<stdio.h>
//int a = 10;//4个字节
//int arr[10] = { 0 };//40
//动态内存开辟:
//p = malloc();
//申请:malloc
//使用
//释放:free(p)
//p = NULL;
//例子:
//int* p = malloc(40);
//使用p指向的40个字节的空间,
//指针释放,需要手动置为NULL,防止指针变为野指针
//free(p);
//此时free里面存的依旧是原来的地址,但是原来地址里面的数据已经被释放,
//已经还给操作系统,容易非法访问,所以要手段添加p=NULL;
//char* p = "hello bit";
//只是把字符串的第一个字符h的地址放在p中,*p拿到的是h
//数组指针:指向数组的指针----指针里面不能存放数组
//int**arr[10]---arr先与[10]结合,变成数组,所以是指针数组,存放二级指针的数组
//char*(*arr)[10]---arr与*结合,变成指针,所以是数组指针,是char数组的指针
//int(*(*F)(int, int))(int)
//(*F)是指针,((*F)(int,int))是函数指针,参数是int,     int(*)(int)是一个函数指针,指向int int
//,int(*)(int)返回一个函数指针(int)是形参,第一个int是返回类型
//int(*arr[10])(int)---存放函数指针的数组,arr可以存放10个函数指针
//int(*arr)[10]---数组指针
//int*arr[10]---指针数组,数组每个元素都是指针
//char str1[] = "hello bit";
//char str2[] = "hello bit";//数组名是首元素地址,数组名是str1和str2,不一样,所以地址不一样
//char *str3 = "hello bit";
//char* str4 = "hello bit";//hello bit只被创建一份,str3,str4是两个指针,同时指向同一内容
//杨氏矩阵  题目内容:
//有一个数字矩阵,矩阵的每一行从左到右都是递增的,从上到下都是递增的
//请编写程序在这样的矩阵中查找某个数字是否存在
//要求:时间复杂度小于O(N);---O(N)含义是元素总个数次方,在这道题里是要求查找的次数小于元素个数
//思路:因为每一行从左到右都是递增的,从上到下都是递增的,所以某一个数与左下右上的角比较,
//必能去掉某一行或一列
int find_num(int arr[3][3], int *px, int *py,int k)
{
    int x = 0;
    int y = *py - 1;
    while (x < *px && y >= 0)//需要好多次查找
    {
        if (arr[x][y] < k)
        {
            x++;
        }
        else if (arr[x][y] > k)
        {
            y--;
        }
        else
        {
            *px = x;//因为return只能返回一个值,所以只能用指针传传参,而且是传址调用,不是传址调用
            *py = y;
            return 1;//找到了
        }
    }
    return 0;//找不到
}
int main()
{
    int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };//随便举的的符合题目的矩阵
    int k = 7;//查找7
    int x = 3;
    int y = 3;
    int ret=find_num(arr, &x, &y, k);//在arr数组中找7,arr是3行3列
    //&x,&y
    //1.传参,2带回值
    //找到返回1,找不到返回0
    if (ret == 1)
    {
        printf("找到了\n");
        printf("下标是:%d %d\n", x, y);
    }
    else
    {
        printf("找不到\n");
    }
    return 0;
}


相关文章
|
11月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
126 3
|
11月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
11月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
11月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
11月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
11月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
201 4
|
11月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
548 4
|
11月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
119 2
|
11月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
105 1
|
12月前
|
存储 Rust C#
内存指针解引用
【10月更文挑战第14天】
185 1

热门文章

最新文章