关于二维数组名和指针的指针
Created|Updated
|Post Views:
我们来看一段代码
1 | void f(int **a) |
这个代码是会报错的,error: cannot convert 'int (*)[2]' to 'int**'
很明显,二维数组名不是指向指针的指针(int **),而是一个指向数组的指针int (*)[2]
如果非要用指针的指针,可以这样
1 | int c[3]={1,2,2}; |
Related Articles
2020-04-06
面向行fgets()和fputs()
前言该函数是面向行操作。不同于,getc()是处理字符 函数fgets() 作用把读入的内容添加到字符串中。 参数(字符串地址,字符个数,FILE指针) 返回值如果读到文件结尾(EOF),返回NULL如果还没有到EOF,返回之前传给它的字符串地址 范围 1.读取到第一个换行符后面。2.读到文件结尾3.读到字符个数-14.如果读到字符上限已经读完一行,则会把结尾的’\n’放在’\0’前面最后,在最后一个字符后面加’\0’ Don’t forget !字符串的大小是:字符个数+最后的空字符 fputs() 参数(字符串地址,FILE指针) fgets()保留了换行符,fputs()不会再添加换行符不同于puts()函数会在末尾添加换行符 strstr() 作用查找字符串中要查找的字符串 参数(被查找的字符串str1,需要的字符串str2) 返回值返回str1中str2的首位置 示例显示含有某个字符的一整行12345678910111213141516171819202122232425262728293031323334#include<stdio.h...
2020-03-19
指针和字符串
前言赋予指针地址的时候要类型匹配。 For instance"name"是char*类型内容 让两个指针指向同一个字符串 1234567891011121314#include<stdio.h>int main(){ char* name = "faye"; //让name(指针)指向字符串,即name就是这个字符串的地址 printf("%s\n", name); char * str; //重新定义一个指针 str = name; //让str(地址)被赋予name(地址)so,str也指向这个字符串 printf("%s\n", str); //这时name和str的地址一样 str = "hello"; //改变了指向的字符串内容 printf("%s\n", str); return 0;} 一个间接的 给指针的指针赋值,让...
2020-03-17
关于随机函数
前言函数srand() //获得随机数rand() //返回随机值time() //返回系统时间 一般用法1234#include<stdlib.h>#include<time.h>srand(unsigned int time(0)); //初始化随机数(种子)printf("%d",rand()); //输出随机数 说明上式中为什么能连续调用两个函数,而且都使用到了(随机数这个变量)?因为,这个变量是stdilib.h文件中的静态,内部链接数据类型。(函数外的static) time()函数返回系统时间。可以使得每次编译得到的种子不一样。 如果要想在一次的程序编译中获得多个种子,或者人为地获得种子?可以用循环更换srand()的参数。但是,这样就无法在每次编译执行后,获得不同的种子了。(因为给予的是每次都相同的常数) 关于函数rand()因为srand()给的这个数很大,所以要用取余和加的方式获取产生范围内的值。 例如...
2020-05-17
递归
DefinitionRecursion the process of repeating a function, each time applying it to the result of the previous stage. 经过树形结构,和嵌套结构后的思想:可像数学函数一样,一个个嵌套,完美解决递归 演示递归 debug1234567891011121314151617/* recur.c -- recursion illustration */#include <stdio.h>void up_and_down(int);int main(void){ up_and_down(1); return 0;}void up_and_down(int n){ printf("Level %d: n location %p\n", n, &n); // 1 if (n < 4) up_and_down(n+1); printf("LEVEL...
2020-04-14
二进制与字符串的转换
前言二进制是一个值01010101,而字符串是一些字符后面加上’\0’,”01010101”.当我们要将这两种形式进行转换的时候,可以运用位运算符,和某两个算法解决。 字符串——>数值 先将数值变量向左移动,再用*取出字符串中的字符,-‘0’转换成数值,添加到变量中。 1234567891011int btoi(char * st){ int num = 0; while (*st)//到空字符结束,8个数,循环8次 { num = (num << 1);//左移动 num += (*st++ - '0');//从左往右取字符,并转换成数值,添加到num } return num;} 数值——>字符串 传递给函数,数值,和要准备存储的字符数组。 取最后一位数(运用8进制的掩码操作01 & num),并将其转换成字符,+ '0'添加到数组中。掩码:运用&运算符,用0覆盖掉1,0也为0 然后,将num...
2020-03-20
字符串输入'char*和char[]'
不同点 定义char* a这个a是变量, 可以修改char b[]这个b是常量, 不能改变 内存空间 一个指针,一个数组 没有开辟空间123char* str; //没有开辟空间scanf("%s", str);//虽然可以读入,但指针是乱指的,可能会擦拭本来的程序导致崩溃printf("%s", str); 这里在C primer plus上看到,这里的参数是个未初始化的指针,str会指向任何地方。所以,有可能会scanf改写某个地址上的值,从而擦掉程序中的代码。导致程序异常结束。 开辟空间123char* st;st = "hello"; //开辟空间printf("%s", st); 字符串的几种输入 当以数据形式赋值时这种形式可以 1char str[10] = "ferry"; 这种形式不行(关键理解,数组的形式中str是常量)123char str[10];str = "ferry"; // str被看作(数组的...
