相关疑难解决方法(0)

sizeof(&array)返回什么?

问题是:为什么数组的地址等于它在C中的值?

#include <stdio.h>
#define N 10    
char str2[N]={"Hello"};
int main(){
    printf("sizeof(str2): %d bytes\n", sizeof(str2));
    printf("sizeof(&str2): %d bytes\n", sizeof(&str2));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

sizeof(str2): 10 bytes
sizeof(&str2): 4 bytes
Run Code Online (Sandbox Code Playgroud)

我知道str2单独是数组中第一个元素的地址str2.并且当str2它的参数何时sizeof返回整个数组str2的大小.

另外,&str2也是arr中第一个元素的地址,str2但是来自不同的类型(char (*)[N]==指向数组的指针).但是&str2当它是一个论证时,它是如何表现的sizeof

c string pointers sizeof

30
推荐指数
3
解决办法
2万
查看次数

C/C++中是否存在锯齿状数组?

在C或C++中是否存在锯齿状数组?

当我编译这个:

int jagged[][] = { {0,1}, {1,2,3} };
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误:声明`jagged'作为多维数组必须具有除第一个之外的所有维度的边界

c c++ jagged-arrays

28
推荐指数
4
解决办法
3万
查看次数

c中的数组名称究竟是什么?

我很难理解C中数组名称的类型和用法.这可能看起来很长,但请耐心等待.

我理解以下语句声明a是类型,int []整数数组.

int a[30];
Run Code Online (Sandbox Code Playgroud)

同时a也指出数组的第一个元素和类似*(a+2)的东西是有效的.因此,a看起来像一个指向整数指针.但实际上类型int []int*不同; 前者是数组类型,后来是指向整数指针.

类型int []变量int*在传递给函数时也会转换为类型变量; 因为C数组是通过引用传递的(sizeof运算符除外).

这就是让我垂涎的观点.看看下面这段代码:

int main()
{
    int (*p)[3];
    int a[3] = { 5, 4, 6 };

    p = &a;

    printf("a:%d\t&a:%d\n",a,&a);
    printf("%d",*(*p + 2));
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

a:2686720       &a:2686720
6
Run Code Online (Sandbox Code Playgroud)

那么,上面的代码是如何工作的呢?我有两个问题:

  1. a&a具有相同的值.为什么?
  2. 到底是int (*p)[3];做什么的?它声明了一个 …

c arrays pointers memory-address

28
推荐指数
2
解决办法
5750
查看次数

在数组char指针的情况下,'数组名称'是什么意思?

在我的代码中:

 char *str[] = {"forgs", "do", "not", "die"};
 printf("%d %d", sizeof(str), sizeof(str[0]));  
Run Code Online (Sandbox Code Playgroud)

我得到了输出12 2,所以我怀疑是:

  1. 为什么会有区别?
  2. 这两个strstr[0]是字符指针,对不对?

c pointers sizeof

22
推荐指数
3
解决办法
4313
查看次数

*ptr [10]和(*ptr)[10]之间的差异

对于以下代码:

    int (*ptr)[10];
    int a[10]={99,1,2,3,4,5,6,7,8,9};
    ptr=&a;
    printf("%d",(*ptr)[1]);
Run Code Online (Sandbox Code Playgroud)

它应该打印什么?我期待这里的垃圾值,但输出是1.
(我为此得出结论,初始化这种方式指针数组即ptr[10]开始指向a[10]按顺序排列的元素).

但是这个代码片段呢:

int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};
*ptr=a;
printf("%d",*ptr[1]);
Run Code Online (Sandbox Code Playgroud)

它给出了分段错误.

c pointers

12
推荐指数
2
解决办法
5万
查看次数

双指针实现二维数组实现

请考虑以下代码:

#include <stdio.h>
#include <stdlib.h>

#define NUM_ARRAYS     4
#define NUM_ELEMENTS   4
#define INVALID_VAL   -1

int main()
{
   int index            = INVALID_VAL;
   int array_index      = INVALID_VAL;
   int **ptr            = NULL;

   ptr = malloc(sizeof(int*)*NUM_ARRAYS);

   if (!ptr)
   {
      printf ("\nMemory Allocation Failure !\n\n");
      exit (EXIT_FAILURE);
   }

   for (index=0; index<NUM_ARRAYS; index++)
   {
      *(ptr+index) = malloc(sizeof(int)*NUM_ELEMENTS); 

      if (!*(ptr+index))
      {
         printf ("\nMemory Allocation Failure !\n");
         exit (EXIT_FAILURE);
      }
   }

   /* Fill Elements Into This 2-D Array */
   for (index=0; index<NUM_ARRAYS; index++)
   {
      for (array_index = 0; …
Run Code Online (Sandbox Code Playgroud)

c double-pointer multidimensional-array

8
推荐指数
2
解决办法
5万
查看次数

在C中返回二维数组?

我最近开始编程C只是为了好玩.我在一个非常熟练的程序员C# .NETJava台式机领域内,但这是谈到了是有点太多对我来说是挑战.

我试图做一些"简单"的事情,如从函数返回一个二维数组.我已经尝试过在网上进行研究,但我很难找到有用的东西.

这是我到目前为止所拥有的.它没有完全返回数组,它只填充一个.但即使这样也无法编译(我相信如果你是一名熟练的C程序员,原因必须是显而易见的).

void new_array (int x[n][n]) {
  int i,o;

  for (i=0; i<n; i++) {
      for (o=0; o<n; o++) {
        x[i][o]=(rand() % n)-n/2;
      }
  }

  return x;
}
Run Code Online (Sandbox Code Playgroud)

用法:

int x[n][n];
new_array(x);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?应该提到的n是具有该值的常量3.

编辑:尝试定义常量时,这是一个编译器错误:http://i.imgur.com/sa4JkXs.png

c

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

如何在C/C++中获取多维数组的列?

int matrix[9][9],*p;
p=matrix[0]; 
Run Code Online (Sandbox Code Playgroud)

这工作并给出了第一行matrix,但如何获得matrix我试过的第一列p=matrix[][0]; ?另外我不明白为什么下面的代码会出现编译错误?

int matrix[9][9],p[9];  // it looks really ugly, byt why it doesn't work ?
p=matrix[0];            // compiler gives "invalid array assigment"
Run Code Online (Sandbox Code Playgroud)

是因为多维数组是数组的数组 - 我们应该解释matrix[i][j]为第i个嵌套数组的第j个元素?

c c++ arrays variable-assignment multidimensional-array

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

如何知道传递给函数的字符数组的大小(以字节为单位)?

我正在测试sizeof运算符。在我的代码中的两种情况下,我得到了指针大小(我认为)。在其他情况下,我得到数组占用的字节数将数组传递给函数时,如何以字节为单位获取数组的大小? 不是的sizeof操作符就够了吗?难道我做错了什么?

#include <stdio.h>

/*Testing the operator sizeof*/

void test (char arrayT[]);
void test2 (char *arrayU);

int main(int argc, char *argv[]){

    char array1[7];
    printf("array1 size is:%d\n", sizeof array1);
    /*array1 size is: 7*/

    char array2[] = { '1', '2', '3', '4', '5', '6', '7'};
    printf("array2 size is:%d\n", sizeof array2);
    /*array2 size is: 7*/

    char array3[] = "123456";
    printf("array3 size is:%d\n", sizeof array3);
    /*array3 size is: 7*/

    unsigned char array4[] = …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers sizeof char

2
推荐指数
1
解决办法
4857
查看次数

将int值分配给地址

我认为以下代码是正确的,但它不起作用.

int x, *ra;     
&ra  = x;
Run Code Online (Sandbox Code Playgroud)

int x, ra;
&ra = x;
Run Code Online (Sandbox Code Playgroud)

如果这两个代码段都正确,请帮助我.如果没有,你在他们身上看到了什么错误?

c c++ pointers visual-studio-2010

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