小编Yu *_*Hao的帖子

在C中创建boolean数据类型

在C中如何创建1字节数据类型?

我希望在C中创建一个改进的布尔类型.有人告诉我使用char类型,但我不知道如何.我使用{true,false}创建了一个枚举,但现在我需要一个长度为1byte的数据类型(可能是1位长).我不认为结构可能有用,所以我每次都必须访问它的字段.我想我可以使用typedef进行内存分配,但我不知道如何实现一个读取整数且一个字节长(或两位)的数据类型.

c

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

C语言是否仅为void指针指定任何隐式初始化?

这是我的代码:

int main()
{
    int *p;
    void *x;
    printf("%p\n", p);
    printf("%p\n", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将打印:

koraytugay $ ./a.out
0x7fff53b35ad0
0x0
koraytugay $ ./a.out
0x7fff5803fad0
0x0
koraytugay $ ./a.out
0x7fff512c9ad0
0x0
koraytugay $ ./a.out
0x7fff55213ad0
0x0
koraytugay $ ./a.out
0x7fff52dbdad0
0x0

这种行为在语言中有什么解释吗?

c initialization void-pointers

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

main(i)在C中的含义是什么,它是如何工作的?我的价值和类型是什么?

void main(i)
{
    printf("%d",i);
}
Run Code Online (Sandbox Code Playgroud)

main(i)这里有什么意义以及它是如何运作的?什么是价值和类型i

c program-entry-point

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

void*和void**之间的区别**

除了能够解除引用之外void**,我不理解以下内容:

void * foo, **bar;
foo++;//error
bar++;//no error
Run Code Online (Sandbox Code Playgroud)

为什么不是第一次工作而第二次工作呢?有什么不同?

c void-pointers pointer-arithmetic

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

意外输出涉及具有后期和预增量的数组值

以下程序的输出不应该是 -

2 3 20

相反,它正在显示

3 2 15

任何人都可以解释这背后的原因吗?

#include<stdio.h>
main()
{
    int a[5] = {5,1,15,20,25};
    int i,j,m;
    i = ++a[1];
    j = a[1]++;
    m = a[i++];
    printf("%d %d %d",i,j,m);
}
Run Code Online (Sandbox Code Playgroud)

c pre-increment post-increment

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

如何评估此C预处理器?

#include<stdio.h>
#define SQUARE(x) x*x
int main(){
float s=10,u=30,t=2,a;
a=2*(s-u*t)/SQUARE(t); // How is this evaluated ? 
printf("Result %f\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器显示的输出为-100.000000.但据我说它应该是-25.000000.我该怎么做才能纠正它,我的错误是什么?

c macros c-preprocessor

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

为什么使用printf打印变量的地址会更改地址

代码1

#include <stdio.h>
int main()
{
    int n[] = {0};
    int i = 1;
    n[0] = i; //making sure the variable is used
    n[-1] = 20; //i's offset when &i is printed
    printf("%d\n", &i);
    printf("%d\n", i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出1

2686744
20
Run Code Online (Sandbox Code Playgroud)

代码2

#include <stdio.h>
int main()
{
    int n[] = {0};
    int i = 1;
    n[0] = i; //making sure the variable is used
    n[1] = 20; //i's offset when &i isn't printed
    printf("%d\n", i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出2 …

c arrays

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

在普通的C中,不使用strlen或任何使用strlen的库函数,如何找到一个字符串是否包含在另一个字符串中?

我说没有strlen用于效率目的.因为如果你使用strlen那么你已经迭代了一个字符串,最好的算法总是迭代一个给定的容器不超过一次.所以帮助我思考如何实现一个功能

bool contains ( char * s1, char * s2 ) 
{
   // ... 
}
Run Code Online (Sandbox Code Playgroud)

尝试:

bool contains ( char * s1, char * s2 ) 
{
   // returns true or false depending on whether s1 is contained in s2

   // define that every string contains the empty string
   if ( !*s1 ) return true;

   // search for substrings of s2 that equal s1
   bool flag = true;
   while ( *s2 ) 
   {
       char * c …
Run Code Online (Sandbox Code Playgroud)

c algorithm optimization

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

memset如何工作

我创建了一个宏 #define ll long long int来避免打字的痛苦.

现在我有一些像这样的代码.

ll size = 2;
ll *arr = new ll[size];
memset(arr,0,sizeof(arr));
Run Code Online (Sandbox Code Playgroud)

当我试图运行这个.

我看到arr的值为4294967296 420906795007而不是0 0

memset如何工作?

c++

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

为什么可以释放/删除返回的对象,但是不能释放/删除通过参数输入的对象?

据我所知,

int * createArray ( void )
{
     int * arr = (int*)malloc(3*sizeof(int));
     arr[0] = 69; arr[1] = 69; arr[2]; 
     return arr;
}

int main ()
{
    int * myArray = createArray();
    free myArray;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将释放数组的所有内存{69, 69, 69}在指向的内存地址myArray,但是

void freeArray ( int * A )
{
     free A;
}

int main ()
{
    int * myArray = (int*)malloc(3*sizeof(int));
    myArray[0] = 69; arr[1] = 69; arr[2] = 69; 
    freeArray(myArray);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不会做同样的事情.这让我感到困惑的原因是因为在这两种情况下你都在处理原始指针的副本,但是从该副本中删除指向的对象仅适用于第一种情况.这似乎是一种不一致,但也许我完全错了.有人可以为我清除这个吗?

c memory-management

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

如何在计算c中字符串的长度时不计算空格

我正在使用以下代码,它计算字符串中的空格,但我不想计算空格.

#include<stdio.h>
#include<conio.h>

void main()
{
   char*ptr,str[30];
   int size=0;
   int word=0;

   puts("enter the string");
   gets(str);
   fflush(stdin);

   for(ptr=str;*ptr!='\0',ptr++)
   {
       size++;
   }

   printf("size of string is = %d",size);
   getchar();
}
Run Code Online (Sandbox Code Playgroud)

c string

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

如果我不在C中使用从零开始的数组会发生什么

有人可以解释会发生什么吗?是否真的有必要从索引开始0而不是1(这对我来说会更容易)?

c arrays

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