#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; }