标签:for 效率 getc oid 用法 char* 数组的数组 完全 10个
1 /* 2 基本数据 int x---->实参 写整数或者整型变量 3 变量地址 修改变量的值 int *px 实参 变量地址 4 数组名 想要操作一位数组 int *px/int arr[] 实参 5 6 7 8 2.堆内存的申请 内存四区 代码区 全局静态常量区 栈区 堆区 9 堆区 内存大 但是需要手动申请释放 10 11 int *p; 12 p=(int*)malloc(sizeof(int)*100);申请一端内存 13 14 p[i] 访问下标为i的元素*(p+1) 15 16 free(p);//释放内存 17 sizeof(int) 4个字节 18 对于不同的系统 不同环境下 数据的大小 不是完全一致的 19 对于类型的大小 统一用sizeof就行 20 21 char*str="hello world"; 22 gets(str);错误的 23 平时 栈区 24 大量数据 ---->堆区 25 全局共享的数据 用全局变量/传参的方式 26 27 二维数组叫做数组的数组 28 新内容 29 1 指针数组和数组指针 30 2 指针常量和常量指针 31 3 指针函数和函数指针 32 33 34 */ 35 #include<stdio.h> 36 #include<stdlib.h> //malloc free realloc 37 /* 查找行最小 列最大的元素 找到后直接打印 */ 38 void fun1(int arr[][4], int row)//二维数组 传参需要传递行 39 { 40 int m, n; 41 for (int i = 0; i < row; i++)//有多少行就找多少次 42 { 43 //查找一次的过程 查找这一行的最小值 44 m = 0;//列从0开始的 45 for (int j = 0; j < 4; j++) 46 { 47 if (arr[i][j] < arr[i][m])//m表示这一行最小元素 列数 48 { 49 m = j; 50 } 51 } 52 //arr[i][m]是这一行的最小元素 53 //找一下这一列有没有比arr[i][m]更大的元素 54 for (n = 0; n < row; ++n)//arr[0][m] arr[2][m] 55 { 56 if (arr[n][m]>arr[i][m]) break; 57 } 58 if (n == row) 59 { 60 printf("所求的点是[%d,%d]\n", i, m); 61 } 62 } 63 } 64 void test() 65 { 66 int arr[3][4] = { //arr有三个元素 arr[0] arr[1] arr[2] 67 9, 7, 4, 5, //arr[0]有四个元素arr[0][0] arr[0][1] arr[0][2] arr[0][3] 68 7, 7, 3, 2, 69 1, 0, 2, 9 70 }; 71 printf("arr[0]的大小%d\n", sizeof(arr[0]));//都一行的大小 72 printf("arr[0][0]的大小%d\n", sizeof(arr[0][0])); 73 //一级指针和一维数组 74 //int brr[10] p=brr//p指向第一个元素 75 //p=&brr[0]; 76 77 78 //二维数组 q=qrr; 79 //q=&arr[0] 取第一行的地址 (取第一个元素地址) 80 //第一个元素 是一个数组 需要用到数组指针 (指向数组的指针) 81 //指向的数组 存什么类型的数据 82 int(*pd)[4];//一行内容 指向数组的指针 数组指针 83 //行指针 84 pd = arr;//指向第一行 85 (*pd)[0];//相当于第一行的第一个元素 pd[0][0] 86 pd[1][2];//都二行第三个元素 87 //定义数组指针 然后指向数组之后 用法和数组是一样 88 //数组指针的意义 89 90 91 92 fun1(arr, 3);//表示数组有三行 93 //行最小 列最大 用循环一个一个去比较 94 //----->找到每一行中的最小值 用循环一个个比较 95 // 然后判断是不是这一列的最大值 96 //int brr[4]; 97 //pd = &brr; 98 //pd = &brr[0]; 99 //pd[0][0]---->brr[0] 100 101 102 //int x; 103 //double y; 104 //int *px; 105 //px=&y; 106 } 107 void test1() 108 { 109 //如果我要一个指针 int *p; 110 //如果使用多个指针 指针数组 111 //类型 数组名[数组大小] 112 int* pArr[10];//指针数组 10个int* 113 //一个指针可以申请一段内存 多个指针 申请多个内存 114 for (int i = 0; i < 10; ++i) 115 { 116 pArr[i] = (int*)malloc(sizeof(int)* 4); 117 } 118 //申请之后相当于一个二维数组10行4列 119 //用法和二维数组是一样的 120 pArr[1][3];//第二行 第四个元素 121 122 for (int i = 0; i < 10; ++i) 123 { 124 free(pArr[i]); 125 } 126 } 127 void test2()//指针常量和常量指针 128 { 129 //const 常属性的意思 不可变(定义的还是变量) 130 int const x = 10;//通过 语法限定 x的值不可修改 必须先定义然后赋值 131 //限定x不能作为左值 栈区 const int x 效果一样 132 int arr[10]; 133 const int* p;//int* const q; //const限定了这个p不能区修改它指向的内容 134 p = &arr[0];//先让p指向第一个元素 135 //*p = 0;//相当于 arr[0]=0 136 //p++; 137 //const在前*在后 常量指针 138 //const修饰的是*p *p不可修改 p不能修改其他值 139 int* const q=&arr[0]; 140 //q = &arr[0];//q不能赋值 141 *q = 0;//说明可以指针q去修改的指向的内容 142 143 //const在*后面 指针常量 144 145 //const修饰是q 说明q不可以修改(不能修改q的指向) 146 147 //使用指针传参 为了效率 修改形参的值 148 char *str = (char*)malloc(sizeof(char)* 100); 149 str = "hello world";//字符串赋值 必须strcpy 150 //让指针指向这个字符串(常量区) 151 //后续释放就没法申请的内存 指针指针已经变了 152 free(str); 153 154 } 155 void test3()//指针函数和函数指针 156 { 157 //指针函数 返回值为指针的函数 malloc作用申请内存 返回是一个指针 158 //函数指针 指向函数的指针 159 //函数调用过程 函数 ---->函数 传递形参 计算 得到返回值--->回到主函数 160 161 void * (*pfun)(size_t _Size);//先复制函数声明--->函数名缓冲(*p) 162 pfun = malloc;//函数指针的赋值 163 //pfun指向函数的地址 --->可以用pfun区调用这个函数 164 165 int*p = (int*)pfun(100 * sizeof(int)); 166 free(p); 167 //函数名作为函数 传递给其他函数 168 //实参是函数名 形参 就是函数指针 169 //指针 可以指向一类函数 170 } 171 void test4() 172 { 173 int *p; //int 174 int *p2[10];// 类型 数组名[数组大小] 175 int(*p3)[10];//int [10] 指向这么一个数组 数组指针 176 //如果实参是二维数组 形参如何写? 177 int(*p4)[3][4];//和三维数组有关 不用考虑 178 } 179 int main() 180 { 181 test(); 182 test1(); 183 test2(); 184 test3(); 185 test4(); 186 getchar(); 187 return 0; 188 }
标签:for 效率 getc oid 用法 char* 数组的数组 完全 10个
原文地址:https://www.cnblogs.com/liugangjiayou/p/10556154.html