在C中如何创建1字节数据类型?
我希望在C中创建一个改进的布尔类型.有人告诉我使用char类型,但我不知道如何.我使用{true,false}创建了一个枚举,但现在我需要一个长度为1byte的数据类型(可能是1位长).我不认为结构可能有用,所以我每次都必须访问它的字段.我想我可以使用typedef进行内存分配,但我不知道如何实现一个读取整数且一个字节长(或两位)的数据类型.
这是我的代码:
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
这种行为在语言中有什么解释吗?
void main(i)
{
printf("%d",i);
}
Run Code Online (Sandbox Code Playgroud)
main(i)
这里有什么意义以及它是如何运作的?什么是价值和类型i
?
除了能够解除引用之外void**
,我不理解以下内容:
void * foo, **bar;
foo++;//error
bar++;//no error
Run Code Online (Sandbox Code Playgroud)
为什么不是第一次工作而第二次工作呢?有什么不同?
以下程序的输出不应该是 -
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) #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.我该怎么做才能纠正它,我的错误是什么?
代码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 …
我说没有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) 我创建了一个宏 #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如何工作?
据我所知,
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)
不会做同样的事情.这让我感到困惑的原因是因为在这两种情况下你都在处理原始指针的副本,但是从该副本中删除指向的对象仅适用于第一种情况.这似乎是一种不一致,但也许我完全错了.有人可以为我清除这个吗?
我正在使用以下代码,它计算字符串中的空格,但我不想计算空格.
#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)