小编Gop*_*opi的帖子

这个指针究竟意味着什么

typedef uint8_t A[3];
A *p;
Run Code Online (Sandbox Code Playgroud)

我无法理解这里的指针p究竟是什么?

A b;
Run Code Online (Sandbox Code Playgroud)

uint8_t b[3];
Run Code Online (Sandbox Code Playgroud)

也是

A *p;
Run Code Online (Sandbox Code Playgroud)

uint8_t (*p)[3];
Run Code Online (Sandbox Code Playgroud)

我的理解是否正确?

如果typedef碰巧只是替换typedef'ed令牌,那么如何做到这一点?谁能解释一下?

c

6
推荐指数
0
解决办法
106
查看次数

取消引用void指针

我有以下代码:

#include <inttypes.h>
#include <stdlib.h>
struct a
{
  void *p;
};

int main(void)
{
  struct a *ptr = malloc(sizeof(struct a));
  ptr->p = malloc(sizeof(uint8_t));
  *((uint8_t *) ptr->p) = 2;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在解除引用之前转换void指针以避免警告

警告:解除引用'void*'指针

我是通过这样做打破任何规则还是这个代码好?

c pointers

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

将指针移动到所需位置

我正在偏移我的指针,如下面的代码所示,以复制到另一个结构.

#include <stdio.h>

struct a
{
    int i;
};
struct test
{
    struct a *p;
    int x,y,z;
};

int main()
{
  struct test *ptr = malloc(sizeof(struct test));
  struct test *q = malloc(sizeof(struct test));
  ptr->x = 10;
  ptr->y = 20;
  ptr->z = 30;
  memcpy(&(q->x),&(ptr->x),sizeof(struct test)-sizeof(struct a*));

  printf("%d %d %d\n",q->x,q->y,q->z);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做我的memcpy()?我的问题是,如果我认识到结构的成员并想要移动我的指针sizeof(struct a*)并复制结构的其余部分,该怎么办?

编辑:

我想复制结构的某些部分,但我不知道其中的成员,但我知道我想跳过某些类型的变量,如示例中所示(struct a*)并复制结构的其余部分.

c

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

静态全局和非静态全局有什么区别

static uint32_t a[20] = {0};
Run Code Online (Sandbox Code Playgroud)

uint32_t a[20] = {0};
Run Code Online (Sandbox Code Playgroud)

我在代码中使用了它们

a[0] = 1;
Run Code Online (Sandbox Code Playgroud)

等等....

当我创建变量static并使用它时出现错误

variable "a" was declared but never referenced
Run Code Online (Sandbox Code Playgroud)

但当我删除时static一切正常。

在这两种情况下,数组a都是全局数组。

错误与 MACROS 有关。

数组声明已完成,并且由某些平台使用,我没有看到任何错误。相同的代码会产生错误,因为此声明/数组未在其他平台上使用。

我的错 !!!!

static uint32_t a[20] = {0};
void func()
{
 ...............
   #ifdef ABC

   a[0] = 1;

   #endif
 ................
}
Run Code Online (Sandbox Code Playgroud)

现在在ABC平台上编译没有错误,在某些非ABC平台上编译时有错误。

解决方案:将全局也包裹在各自的宏下

#ifdef ABC
static uint32_t a[20] = {0};
#endif
Run Code Online (Sandbox Code Playgroud)

c

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

使用fscanf()跳过字符串

输入文件是这样的,它在第一行有一个字符串后跟一个整数,从第二行开始,它有一个字符串后跟2个整数.我的下面的代码运行良好,但有没有办法跳过字符串?我只是用一些字符数组char sink [30]扫描它.实际上我不需要这个值如何使用fscanf()来跳过这个字符串并只读取整数.

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

int main()
{
    int v,i=0,f=1;
    static int *p,*q;
    FILE *fp;
    char sink[30];
    fp = fopen("some.txt","r");

    while(!feof(fp))
    {   
        if(f)
        {   
            fscanf(fp,"%s %d",sink,&v);
            p = (int *)malloc(sizeof(int)*v);
            q = (int *)malloc(sizeof(int)*v);
            f=0;
        }   
        else
        {   
            fscanf(fp,"%s %d %d",sink,&p[i],&q[i]);
            i++;
        }   
    }   

    fclose(fp);

    printf("The input vertices are\n");
    for(i=0;i<v;i++)
        printf("%d %d\n",p[i],q[i]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

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

我的isupper函数总是说它不是上层

我似乎无法弄清楚为什么我的输出只有一倍.

#include<stdio.h> 
#include<stdlib.h>
int my_isupper(int c);
int my_tolower(int c);

int
main(int argc,char *argv[]){
int c;
printf("Enter alphabet:");
scanf("%d",&c);
if ((c<='A' && c>='Z')||(c<='a' && c>='z')){
    printf("Error: Please type a alphabet\n");
    exit(EXIT_FAILURE);
}
if (my_isupper(c)==0){
   printf("isnotupper");
}
else{
   printf("is upper");
}
return 0;
}
int my_isupper(int c){
if(c>='A' && c<='Z'){
   return 1;
}
else {
   return 0;
}
}
Run Code Online (Sandbox Code Playgroud)

输出始终为"Isnotupper".可能是一个简单的错误.我是c编程的新手.如果您有关于调试的任何提示,请告诉我,以便我不会打扰任何人可以自我纠正的事情.谢谢!

c

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

气泡排序超过了一个时间限制

#include <stdio.h>

int main(void) {

    int a[5]={1,2,0,5,4},i,j,c;
    for(i=0;i<5;i++)    
    {
        for(j=0;j<5-i;j++){
            if(a[j]>a[j+1])
            {
                c=a[j];
                a[j]=a[j+1];
                a[j+1]=c;
            }
        }
    }
    for(i=0;i<5;i++)
    {
    printf("%d",a[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

ideone说"时限超过时间:5记忆:2048信号:24"

但它在turbo编译器上工作正常

c sorting bubble-sort

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

C用户选择while循环

我是编程新手,所以我使用的代码相当于我学到的东西.无论如何我正在开发一种场景,在这种场景中,用户输入两个选项中的一个,这两个选择将触发不同的代码集来执行,或者至少是我试图做的事情.然而,当我浏览我的代码时,它正在执行它,好像没有if语句所有内容都作为一个块运行.我很确定我的逻辑是正确的,如果有的话我的语法是不确定的.如果有什么可以做的话,你们可以做些什么来帮助解决我的问题,如果可能的话,我想学习而不仅仅是解决问题.感谢您的时间.

    int main()
{
    int move = 0, pstrength = 10, pdefense = 20, pintelligence = 40, php = 10, estrength = 30,
        edefense = 40, eintelligence = 25, ehp = 10; 

    printf("Battle Start!\n\nYour HP: %d Enemy HP: %d\n\n1 - Attack\n2 - Magic\n\n", php, ehp);

    float pap = (float)pstrength / (float)edefense * 5;
    float pmp = (float)pintelligence / (float)eintelligence * 5, eap = (float)estrength /
        (float)pdefense * 5;

    do {
        printf("Select your move: "); 
Run Code Online (Sandbox Code Playgroud)

如果选择了动作1,/player将选择执行什么动作然后玩家攻击如果敌人没有跌到0马力,则敌人攻击然后循环重置并提示第二轮输入 /

    scanf("%d", &move); …
Run Code Online (Sandbox Code Playgroud)

c if-statement user-input do-while

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

在while循环结束时添加一个`;`

#include<stdio.h>

int main()
{
    int i=5;
    while(i--)
    {
        printf("%d\n",i);
    };
    printf("Out of loop\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常!是否;在一个循环的结束并不意味着什么?所以,即使我们添加它,我们也没有任何问题?只是好奇!我认为;在循环结束时添加没有任何意义.

c

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

宏空白

请参阅以下代码

#include <stdio.h>
#include<stdlib.h>
#define MALLOC(n) malloc(n)
int main(void) {
    int *x = MALLOC (sizeof(int) * 10);
    x[0] = 20;x[9] =200;
    printf("%d %d\n",x[0],x[9]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我应该打电话给MALLOC(sizeof(int) * 10)对吗?由于宏应该与调用匹配.即使我打电话给MALLOC (sizeof(int) * 10)我得到相同的输出是这个未定义的行为?或者我错过了什么?

在后MALLOC一个调用之后的空格是否被忽略了?

标准说当我们调用一个宏时,它的确切文本表示被替换不是这里的情况吗?

c malloc

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

高斯消除C++分段错误

我真的坚持使用C++中的高斯消除代码,我需要返回上三角矩阵但仍然只有我得到的是分段错误.我知道必须有一些分配的内存,但我找不到.

码:

#include <iostream>

using namespace std;

double ** allocateDynamicArray(int order){
    double ** dynArray = new double *[order];
    int cols = order+1;
    double *pool = new double [order * cols];
    for(int i = 0;i < order; i++, pool += cols){
           dynArray[i] = pool;
    }
    return dynArray;
}

void deallocateDynamicArray(double **dynArray){
    delete [] dynArray[0];
        delete [] dynArray;
}

void addAndPrintArray(double **dynArray, int order){
    cout << "Zadejte prvky pole radu " << order << endl;
    for(int i=0; i< order; i++){
        for(int j=0; …
Run Code Online (Sandbox Code Playgroud)

c++ gaussian matrix segmentation-fault

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

定义和声明应该匹配吗?

在我的.h文件中,我有

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

在我的.c文件中

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

这有什么问题吗?

声明和定义大小很重要?不对?

如果我写入sizeof(a)其中一个文件,那么输出是什么?这是未定义的行为吗?

c

-4
推荐指数
2
解决办法
157
查看次数