相关疑难解决方法(0)

指针和数组在C中有什么不同吗?

我正在编写一个小程序来进行一些数字运算,它需要在函数之间传递数组.函数应该接受并返回指针,对吧?

例如,这(我知道它可能不是最有效的):

int* reverse(int* l, int len) {
    int* reversed = malloc(sizeof(*reversed)*len);
    int i, j;
    for (i = 0, j = len-1; i < len; i++, j--) {
        reversed[j] = l[i];
    }
    return reversed;
}
Run Code Online (Sandbox Code Playgroud)

我使用指针吗?

c arrays pointers

7
推荐指数
1
解决办法
818
查看次数

数组a和&a的起始地址

在以下两行中,

char a[5]={1,2,3,4,5};
char *ptr=(char *)(&a+1);
printf("%d",*(ptr-1));
Run Code Online (Sandbox Code Playgroud)

这在屏幕上打印5个.当使用a而不是&a时,

char a[5]={1,2,3,4,5};
char *ptr=(char *)(a+1);
printf("%d",*(ptr-1));
Run Code Online (Sandbox Code Playgroud)

这打印1

a和&a都是数组的起始地址.所以为什么这有区别?

char*ptr =&a + 1;

显示警告.

c pointers

7
推荐指数
2
解决办法
5269
查看次数

C++指针与数组表示法

当我声明一个像这样的新数组:

int foo[5]
Run Code Online (Sandbox Code Playgroud)

foo真正的指针数组的第一个元素?我能做到这一点:

*(foo+2)
Run Code Online (Sandbox Code Playgroud)

访问数组的第三个元素?假设我正在制作2D数组:

int foo[3][4]
Run Code Online (Sandbox Code Playgroud)

foo现在int**

c++ arrays pointers

7
推荐指数
1
解决办法
2443
查看次数

C++数组大小

可能重复:
作为参数传递的Sizeof数组

我在c ++中使用这个sizeof运算符是愚蠢的,你知道为什么它是4和12吗?

 void function (int arg[]) {
        cout<<sizeof(arg)<<endl; // 4
    }

    int main ()
    {
        int array[] = {1, 2, 3};
        cout<<sizeof array<<endl; // 12
        function (array);
       return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c++ arrays sizeof

6
推荐指数
1
解决办法
3万
查看次数

为什么将数组作为"int*&name"传递?

我得到了一个(C++)代码,其中使用了数组

void fun(int *& name){...}
Run Code Online (Sandbox Code Playgroud)

但这背后的想法是什么?我想这意味着"一个引用数组"但是当你只是将一个指针传递给第一个很好的元素时,不是吗?那么这样做的动机是什么?

c++ arrays

6
推荐指数
1
解决办法
257
查看次数

数组名称不是左值的原因是什么?

例如,

int x[10];
int i = 0;
x = &i; //error occurs!
Run Code Online (Sandbox Code Playgroud)

根据C - A参考手册,数组名称不能是左值.因此,x不能是左值.但是,数组名称不能是左值的原因是什么?例如,为什么第三行发生错误?

c arrays lvalue

6
推荐指数
1
解决办法
1666
查看次数

矩阵作为 C89 中的函数参数

在我本科 C 编程课程的大部分时间里,我们学习了 C99,我们的讲师从不费心教我们 C99 和以前版本之间的主要区别。

我们最近被告知,我们可能会被要求在下一次考试期间使用 C89 实施解决方案。

我的问题是关于函数内部声明和使用的可变长度多维数组的使用。

在 C99 中,我可以有这样的功能:

void func(int cols, int mat[][cols], int rows);
Run Code Online (Sandbox Code Playgroud)

而在 C89 中,VLA 和类似的装置是不合法的。有人告诉我,您需要改用指向指针的指针。所以像:

void func(int **mat, int cols, int rows);
Run Code Online (Sandbox Code Playgroud)

但是,我在理解方面遇到了问题:

  1. 您将如何在函数内部访问此矩阵中的元素。你还能用这个符号mat[i][j]吗?
  2. 您将如何声明和填充这样的矩阵。你从类似的东西开始int **mat;吗?我认为您必须使用malloc(),但我很难弄清楚确切的声明语句。
  3. 矩阵甚至可以像指向指针一样使用吗?我读过它们的工作方式相似但不完全相同。您如何解决 C89 中概述的问题?

边问。仍然关于可变大小的矩阵,有人告诉我有这样的设置:

int rows, cols;

// get rows and cols from stdinput

int mat[rows][cols];
Run Code Online (Sandbox Code Playgroud)

由于程序堆栈上的分配,这不是创建具有给定维度的矩阵的最佳方法。什么是更好的方法?

谢谢!

c function matrix c89 variable-length-array

6
推荐指数
1
解决办法
260
查看次数

理解C数组和指针

需要一些帮助来了解此代码段中究竟发生了什么.当我运行该程序时,它打印7.

#include <stdio.h>
int main() {
int a[] = {1,2,3,4,5,6,7,8,9};
int b[] = {1,2,3,4,5,6,7,8,9};
int c = 5;
int *p = a;
printf("--> %d", (c[b])[p]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

当涉及到printf语句中的(c [b])[p]部分时,我只是有点困惑.任何帮助/解释将不胜感激.

c arrays printf pointers

5
推荐指数
1
解决办法
75
查看次数

数组名称是C语言中的指针吗?

我知道C语言中的指针是一个保存地址的变量。例如:

int myVar;
int *p;
p = &myVar;
printf("%p\n", p);
printf("%p\n", &p);
Run Code Online (Sandbox Code Playgroud)

输出将是两个不同的地址,第一个是myVar的地址,第二个是指针本身的地址,这意味着指针也是变量,并且在内存中有一个地址(如果我错了,请更正我)

但是我的问题是关于数组的,例如,我们有以下代码:

int myArray[10];
Run Code Online (Sandbox Code Playgroud)

所以在这里我认为myArray也是一个指针,它保存着myArray的起始地址,在本例中是myArray [0],所以当我打印myArray [0]和myArray的地址时,我得到相同的结果:

printf("%p\n", &myArray[0]);
printf("%p\n", myArray);
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试打印myArray本身的地址时,这对我来说是令人困惑的部分:

printf("%p\n", &myArray);
Run Code Online (Sandbox Code Playgroud)

在这里,我得到了与我希望获得另一个地址(如指针)相同的结果。myArray是标签还是其他东西?

c arrays pointers

5
推荐指数
1
解决办法
84
查看次数

为什么C中的这个简单程序崩溃(数组VS指针)

我有两个文件:

在文件1.c中,我有以下数组:

char p[] = "abcdefg";
Run Code Online (Sandbox Code Playgroud)

在文件0.c中,我有以下代码:

#include <stdio.h>

extern char *p; /* declared as 'char p[] = "abcdefg";' in 1.c file */

int main()
{
    printf("%c\n", p[3]);   /* crash */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是命令行:

gcc  -Wall -Wextra     0.c  1.c
Run Code Online (Sandbox Code Playgroud)

我知道extern char *p应该是:extern char p[];但我只想解释为什么它在这种特殊情况下不起作用.虽然它在这里工作:

int main()
{
    char a[] = "abcdefg";
    char *p = a;

    printf("%c\n", p[3]);   /* d */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays pointers extern

4
推荐指数
1
解决办法
201
查看次数

标签 统计

arrays ×8

c ×7

pointers ×6

c++ ×3

c89 ×1

extern ×1

function ×1

lvalue ×1

matrix ×1

printf ×1

sizeof ×1

variable-length-array ×1