如何使函数在 C 中返回指向一维数组的指针?

发布于 科技 2024-05-11
17个回答
  1. 匿名用户2024-01-28

    子函数中定义的通用指针变量会在子函数结束后自动释放,如果返回这样的局部指针变量,调用方一般无法正确读取指针地址中的数据。

    因此,如果要在 main 函数中输出自定义函数中定义的数组,则需要在自定义函数中将数组定义为静态数组,然后返回数组名称。

    静态变量的生命周期是整个程序的生命周期,从定义开始,直到程序结束才发布。

    #include

    char *get str(void) 返回 type 值作为字符指针。

    static char str[100]=;静态变量的初始化在定义时仅执行一次,并且仅执行一次初始化。

    sprintf(str,"hello world");

    return str ;

    void main()

    char *p;

    p=get_str();

    printf("%s", p );

  2. 匿名用户2024-01-27

    函数的返回值由函数的定义确定。

    对于要返回指针的函数,应在函数定义中将返回值指定为指针,以便函数返回指针。

    如果函数返回的指针指向的是一维数组,那么在函数运行时应该将指针指向该数组,这样函数才能返回指向一维数组的指针,同时也要注意函数运行后是否释放了一维数组的内存。

  3. 匿名用户2024-01-26

    int* pi()

    static int a = ;

    int* p = a;

    return p;

    指针不是仍然是指针吗,指针按原样返回。

  4. 匿名用户2024-01-25

    int (*func())3] fun 是一个函数,它返回指向具有三个 int inter 的 intent 数组的指针。您需要使用子函数中的 malloc 函数来为此指针分配内存。

  5. 匿名用户2024-01-24

    答案:1如何声明一个指向整个 n 个元素数组的指针,每个元素都是 int,不是 int (*p)[n],而是最简单的 int*p;

    2.如何声明一个指针,该指针也指向一个有 n 个元素的数组,每个元素都不是 int,而是一个指针 int*; 此指针为 int**p;

    3.你如何声明一个指向另一个指针的指针,这个“另一个指针”指向一个数组,数组元素是一个 int; 此指针仍为 int**p。

  6. 匿名用户2024-01-23

    2.那么,你如何声明一个指针,它也指向一个有 n 个元素的数组,每个元素都不是 int,而是一个指针 int*;

    指针数组,int *arrayint[n];

    指针 int *(p)[n];

    3.你如何声明一个指向另一个指针的指针,这个“另一个指针”指向一个数组,数组元素是一个 int;

    数组 int array[n];

    int **p;

  7. 匿名用户2024-01-22

    2, int *(p)[n];其中: int *[n]; 是指针数组,(*p) 是它的指针。

    3 int (*p)[n];其中 int [n] 是普通的 int 数组,(*p) 是它的辅助指针。

  8. 匿名用户2024-01-21

    p=&a;它是 = 符号两侧的类型匹配。 因为 p 被声明为指向具有 4 个元素的一维整数数组的指针,而 a 被定义为指向整数数组的第一个元素的指针,所以它被写成 p=a; 等号两边的类型不匹配,甚至连编译都无法传递。 &a 是指向具有 4 个整数元素的一维数组的指针 - 即在 int a[4]=; ,a 是 1 的地址,a+1 是 2 的地址; 虽然 &a 的值与 a 相同,但 &a 是整个数组的地址,但 &a+1 指向 7 之后的单元格。

    而 int (*p)[4]; 这个语句正是 &a 的意思,即 p 是指向 4 元素整数数组的指针,即 p+1 跳过了 4-int 元素占用的空间。

    printf("%d",(*p)[3]);(*p)[3] in 的意思是这样的:p=&a;,p 的地址 “value” 是 1 的地址 “value”,但它表示存储在 1、3、5 和 7 旁边的 4 个 int 数的第一个地址,在 *p 之后是第一个元素 1 的地址,然后 (*p)[3] 将 3 个元素的位置向后移动,应该是 7 ......这里 *p 用 () 括起来,因为优先级高于 *,如果不封装,就会被解释为 *(p[3]),这意味着一个很大的错误!

    这里涉及的指针操作有点“缠绕”,要慢慢体验......

  9. 匿名用户2024-01-20

    在这里写 p=a 是可以的。 因为数组的定义是 int a[4],而 a 表示数组所在的内存地址,所以 p=a 实际上等价于 p=&a,你试着用 p=a 替换它,结果还是 7

    感谢您领养

  10. 匿名用户2024-01-19

    int **p 是指向 int* 的指针,int(*p)[10] 是指向数组的指针。

  11. 匿名用户2024-01-18

    由于 int **p 定义是指向 int* 类型的指针,因此在楼下所说的 int **p。

    int (*p)[10] 是一个指向长度为 10 的数组的指针

    如果定义为 deal(int **p),则应使用参数来加强类型转换:deal((int**)a);

    而且用 p 的时候不能用下标,p[2][3] 就错了,因为你不知道 p 指向的 int* 类型的长度,也编译成 *(p+2*10+3)。

    您必须编写 *(p+2*10+3) 才能调用它。

    如果它被定义为 deal(int (*p)[10]),则情况并非如此,并且编译器将知道 p 是指向长度为 10 的数组的指针。

    然后 p[2][3] 将被编译为 *(p+2*10+3)。

    简而言之,C 语言非常灵活,不同的定义和不同的用法可以得到正确的结果。

    不知道房东懂不懂?

    还有多维数组与多维指针的问题,房东可以自己做个类比。

  12. 匿名用户2024-01-17

    首先,你要明白数组名称和指针本质上是一回事,它们都是地址,数组的第一个地址。 一旦你知道了这一点,你就可以学习并付诸实践。 这就是C语言的精髓。

    例如,定义 int *p,a[10]; 并设 p=a; 这个操作称为指向数组 a 的指针 p,其本质是给变量 p 支付一个值,即数组 a 的地址、a[0] 的地址以及存储在 a 本身中的内容。

    所以引用 a[i],你可以用多种方式写它,比如 *(a+i), p+i), p[i],所有这些都是等价的。

    p++ 的意思不是 p=p+1,至少有时候不是,p++ 的运算其实是指向 p 指向下一个元素,即 p 指向 a[0],所以现在 p 指向 a[1]。 由于 a 是一个 int 类型并且代表 4 个字节,因此操作 p++ 实际上将 p 的内容加 4。 不要问为什么,这是C规定的。

    如果 p 指向 char 类型,则 p++ 将 p 的值增加 1。

  13. 匿名用户2024-01-16

    如果要表达a[i],最常用的a[i]也可以是*(a+i),或者*(p+i)c语言规定:表达式1[表达式2]完全等价于*(表达式1)+(表达式2)),也可以说a[b]和b[a]也是完全等价的,也就是说a[i]和i[a]也是完全等价的, 你可以试试。

  14. 匿名用户2024-01-15

    *p *a p=a 表示数组的第一个地址分配给指针 P,以便指针指向数组,p++ 表示指针 p 地址加 1,使其指向下一个地址。

  15. 匿名用户2024-01-14

    a[i] 可以表示为: *(a+i) a[i] 我只记得这两个。

    p=a 表示数组中第一个带有 p 的地址,指针指向该地址。

    p++ 表示 p 指针指向其下一个元素 例如,如果 p 指向 a[i],则 p++ 指向 a[i+1]。

  16. 匿名用户2024-01-13

    一个""或"*",这是一个数组。

    二""或"*",是变量,包括组合。

    a 是二维数组或数组指针。

    所以:变量是:1 9

    一维指针为:2 5 7 8

    数组指针为:3 4 6

  17. 匿名用户2024-01-12

    1数组指针强调它是一个指针,这个指针指向一个数组,给这个指针数组名称就是给数组指针赋值。

    2 二维数组中每个元素是什么,取决于你定义二维数组的类型,例如:char num[3][3],数组中的每个元素都是 char 类型的一大块内存,可以存储 char 类型的数据。 二维数组的名称是整个二维数组的第一个地址,a=&a[0]=&a[0][0]=a[0]=a[0]的值是二维数组的第一个地址的值。

    指针数组的名称是一块开放内存的第一个地址,它是一个常量,如a[0],它指向数组的第一个内存区域,并且可以分配内存区域,理解。

    char *ss[6];ss[1]="right?"这句话首先定义了一个 char 类型的指针数组,强调它是一个数组,其中的元素是指针,指针指向 char 类型的数据,ss[1] 是指针数组的第二个元素,是指针,指针指向“右”字符串的第一个地址。

    char ss[6][20];ss[1]="right?"就是定义一个二维字符数组,6个横向,20个长,起到混淆作用! 在二维数组中,ss[0]、ss[1]等表示第一行和第二行,ss[0][3]是第一行的第四个元素,ss[1][3]代表第二行的第四个元素。

    3.第三个问题是再用我一次,你可以换个职业!! 哈哈哈。

    祝你学习好运!!

相关回答
3个回答2024-05-11

递归实际上是“函数的自我调用”。

在这个“自调用”过程中,必须有一个变化的“参数”,当这个“参数”达到你想要的值时,“自调用”过程就终止了。 >>>More

10个回答2024-05-11

#include

定义最大大小 100 我随便写的,我需要自己改变它。 >>>More

20个回答2024-05-11

第一步是设置一个随机种子。

#include < >>>More

9个回答2024-05-11

VC**中可以生成一些接口,可以参考,也可以参考MSDN。 这不是一个可以在这里说的问题,因为它需要很多话才能完成。 这不是你能在一两天内学会的东西。 强烈建议您查看有关此主题的书籍。