相关疑难解决方法(0)

2D指针初始化

如何使用指针初始化2D数组.

int *mapTable[] = { {1,10} , {2,20} , {3,30} , {4,40} };  // It's giving error
Run Code Online (Sandbox Code Playgroud)

int *mapTable是一个错误.

我怎样才能正确申报?

c c++

0
推荐指数
1
解决办法
138
查看次数

指向内存的指针

我正在学习C并且有一些问题.我正在试图为每个声明的变量打印内存插槽,但是当我为Char []声明指针时,它只是不起作用.

这是我的代码:

int main () {
    char a[3]; // this variable is my problem
    int b;
    float c;
    char d;
    int e=4;

    char *pachar; //A char type variable for the pointer.
    int *paint;
    float *pafloat;
    char *pacharr;
    int *paintt;

    pachar = &a; // when I try to assign the memory to the pointer, it shows a Warning message.
    paint = &b;
    pafloat = &c;
    pacharr = &d;
    paintt = &e;


    printf("%p \n",pachar);
    printf("%p \n",paint);
    printf("%p \n",pafloat);
    printf("%p \n",pacharr);
    printf("%p …
Run Code Online (Sandbox Code Playgroud)

c pointers char

0
推荐指数
1
解决办法
141
查看次数

"数组"元素值是存储在一个位置还是存储在不同的位置?

由于C语言中没有数组这样的东西,以下是否都存储在一个内存位置,或者每个元素的值存储在内存位置的"数组"中?

int array[] = {11, 13, 17, 19};
Run Code Online (Sandbox Code Playgroud)

哪一个是有效的内存布局?

c arrays pointers memory-layout

0
推荐指数
1
解决办法
2210
查看次数

为什么以下数组操作是非法的?

表达式x++;x*2;被报告为非法。编译器产生错误。但是,如果x+1;没有报告错误。

谁能帮助我理解为什么特定的表达方式是非法的?或者,换句话说,为什么添加是合法的?

代码:

#include <stdio.h>
int main(void)
{ 
   int x[]={1,2,3,4,5};
   x++;
   x+1; 
   x*2;
}    
Run Code Online (Sandbox Code Playgroud)

c arrays

0
推荐指数
2
解决办法
2879
查看次数

为什么在C中使用指针时不需要指定数组大小?

使用指针时为什么不需要指定数组大小?

我是C的新手,并试图更好地了解它是如何工作的.

如果我使用指针来声明数组问候,我不需要指定数组大小.如果我拿走指针,那么我需要定义数组的大小.

为什么编译器在使用指针声明char变量时不需要知道要分配的数组的大小,但是当我只声明一个char变量时它就会这样做.有点混淆为什么会这样.

这是我的示例代码:

int main()
{
    char *greet; // Works fine.

    // char greet; // Doesn't work. Crashes when entering text.
    // char greet[]; // Doesn't work. Array size missing, won't compile.
    // char greet[20]; // Works fine.

    printf("Enter name\n>");
    gets(greet);

    printf("Hello %s", greet);


}
Run Code Online (Sandbox Code Playgroud)

c arrays string pointers memory-management

0
推荐指数
2
解决办法
465
查看次数

int*和int之间有什么区别[size]

Case I: 
   int a[12];
   printf("%d",sizeof(a));

Case II:
    int *a = (int *)malloc(12*sizeof(int));
    printf("%d",sizeof(a));
Run Code Online (Sandbox Code Playgroud)

以上两个代码片段返回不同的输出,

  • 48 在第一种情况下
  • 4 在第二种情况下

为什么会这样?

c

-1
推荐指数
1
解决办法
95
查看次数

何时在指针赋值中使用 *?

因为我在学习 CI 时经常看到指针。

我知道一个指针保存了内存中不同位置的十六进制值。所以指针就是例如:0x7fff5fbff85c

每个指针也是不同的类型。

int var = 10;
int *ptr = &var;
Run Code Online (Sandbox Code Playgroud)

这里的ptr指向var的位置。要获得 var 的值,我必须使用*ptr. 喜欢

printf("Var = %d", *ptr);
Run Code Online (Sandbox Code Playgroud)

将打印 `Var = 10;

但是,如果我对指针进行非内联声明,例如:

int var = 10;
int *ptr;
ptr = &var;
Run Code Online (Sandbox Code Playgroud)

*当我实际将内存地址分配给指针时,我不必在第三行中使用。但是当我得到一个带指针的函数时:

int var = 10;
void assignPointer(int *ptr) {
*ptr = 10;
}
Run Code Online (Sandbox Code Playgroud)

等一下!在我写这篇文章时,我意识到指针有两种不同的分配:

*ptr = 10;
Run Code Online (Sandbox Code Playgroud)

ptr = &var;
Run Code Online (Sandbox Code Playgroud)

有什么不同?在第一种情况下,我是否首先取消引用指针,将 10 分配给其持有的位置?在第二种情况下,我将实际位置分配给指针。

我有点困惑何时使用 * 何时不使用赋值。

如果我正在处理数组,为什么我需要指针呢?

int array[];
Run Code Online (Sandbox Code Playgroud)

这里的“array”已经保存了十六进制内存位置。这不使它成为一个指针吗?所以如果我想为数组分配一些东西,我不会写:

*array = [10, 2];
Run Code Online (Sandbox Code Playgroud)

首先我取消引用,然后我分配。

我迷路了 :(

编辑:也许有点不清楚。我不知道当你使用指针时什么时候必须使用 * 什么时候不用。携带十六进制的所有内容都是指针,对吗?数组的变量名携带它的十六进制内存位置。那么为什么它不是一个指针呢? …

c memory arrays variables pointers

-1
推荐指数
1
解决办法
9327
查看次数

当我想在C中将指针设置为NULL时,如何修复不兼容的类型错误?

当我尝试将自构造类型数组指定为NULL时,遇到了不兼容的类型错误.这是我的代码:

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

typedef struct {
 int i;
 double j;
} MyStruct;

int main() {
 MyStruct array[10];
 ... //doing something
 *array = NULL;
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用以下方法在Ubuntu上编译它:

 gcc -o main main.c
Run Code Online (Sandbox Code Playgroud)

编译器显示以下错误:

error: incompatible types when assigning to type 'MyStruct {aka struct <anonymous>}' from type 'void *'
*array = NULL;
       ^
Run Code Online (Sandbox Code Playgroud)

如何将数组分配给NULL?

我知道数组和指针是不同的,在大多数情况下,数组名称将转换为指针.(正如这个问题所解释的那样:数组名称是指针吗?)但是当我的程序涉及自构造结构时,事情会有所不同.

我尝试了以下两件事:

// 1st
int main() {
 int array[10];
 ... //doing something
 *array = NULL; // this gives a warning!!!
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在编译时只有一个警告,而下面的代码有错误. …

c null struct pointers variable-assignment

-1
推荐指数
1
解决办法
306
查看次数

如何更新char monthName [256];

我的任务是在用户输入月份和年份时创建日历.所有这些都很有效,但我无法弄清楚如何更新char monthName[256];变量.我的猜测是monthName = "January"(或无论哪个月),但这不起作用.不知道我做错了什么.

FWIW,用户不输入月份名称.我必须根据用户输入的月份数将其打印到屏幕上.

c++

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

取消引用这个指针给了我-46,但我不知道为什么

这是我运行的程序:

#include <stdio.h>

int main(void)
{
    int y = 1234;
    char *p = &y;
    int *j = &y;
    printf("%d %d\n", *p, *j);
}
Run Code Online (Sandbox Code Playgroud)

我对输出有点困惑.我所看到的是:

-46 1234
Run Code Online (Sandbox Code Playgroud)

我把这个程序写成了一个实验,不知道它会输出什么.我期待可能有一个字节y.

这里发生了什么"幕后"?解除引用如何p给我-46

正如其他人指出的那样,我必须进行明确的施法才能导致UB.我没有改变这一行char *p = &y;,char *p = (char *)&y;所以我没有使下面的答案无效.

此程序不会导致此处指出的任何UB行为.

c pointers casting dereference

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

C/C++ 中的 float* 和 float[n] 有什么区别

使用有什么区别

float* f;
Run Code Online (Sandbox Code Playgroud)

float f[4];
Run Code Online (Sandbox Code Playgroud)

或者他们的处理方式完全相同?使用一个而不是另一个可能会导致您遇到内存分配问题吗?如果没有,是否有任何情况下他们被区别对待?

不知道这是否相关,但我使用类型 float* 作为函数参数。例如:

void myfun(float* f){
     f[0] = 0;
     f[1] = 1;
     f[2] = 2;
     f[3] = 3;
}
Run Code Online (Sandbox Code Playgroud)

它编译并运行良好(我不确定为什么 - 我认为因为我没有分配任何内存f,它会抛出某种异常)。

c pointers static-memory-allocation

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

我的指针算术有什么问题?

我需要帮助试图弄清楚为什么我的指针数组不起作用.我正在递增指针地址和I.我的控制台窗口只是挂起.

int *arr = new int[10];
int i = 0;

while (i < 10){
    *arr = i;  // assign the value of arr to i
    arr++;     // increment the pointer by 1
    i++;       // increment i
}

delete[] arr; 
Run Code Online (Sandbox Code Playgroud)

c++

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

sizeof(指针变量)/ sizeof(数组的第一个元素)的结果总是显示2

通常要找到阵列的大小,我们做..

int A[]={1,2,67,9,0,-1,-90};
int n=sizeof(A)/sizeof(A[0]);
printf("the size of the array is %d\n", n);`
Run Code Online (Sandbox Code Playgroud)

上面代码的输出显示大小为7.但当A被放入某个指针然后,如果我们尝试做同样的,它显示

int A[]={1,2,67,9,0,-1,-90};
int *B=A;
int n=sizeof(B)/sizeof(B[0]);
printf("the size of the array is %d\n", n);
Run Code Online (Sandbox Code Playgroud)

答案是2

如何使用此指针找到数组的大小.

c pointers sizeof

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