用gcc C99编译
我一直在使用enums一段时间.但是,我正在使用一些示例代码来开发我的应用程序.我偶然发现了一些像这样的代码.我被告知这是使用枚举时的最佳实践.但我不知道这有什么好处.
typedef enum {
TYPE_DATE,
TYPE_TIME,
TYPE_MONEY,
TYPE_COUNT,
TYPE_UNKNOWN = TYPE_COUNT
} string_type_e;
Run Code Online (Sandbox Code Playgroud)
为什么TYPE_COUNT要分配TYPE_COUNT给TYPE_UNKNOWN谁?
非常感谢任何建议,
我是网络编程的新手.以下结构定义对我来说非常困惑.这h_addr_list是一个定义为字符串数组,但它用于存储in_addr结构数组.它为什么不定义struct in_addr **h_addr_list而不是char **h_addr_list?
struct hostent
{
char *h_name; /* Official domain name of host */
char **h_aliases; /* Null-terminated array of domain names */
int h_addrtype; /* Host address type (AF_INET) */
int h_length; /* Length of an address, in bytes */
char **h_addr_list; /* Null-terminated array of in_addr structs */
};
struct in_addr
{
unsigned int s_addr; /* Network byte order (big-endian) */
};
Run Code Online (Sandbox Code Playgroud) 我想在微处理器中实现符号和零标志设置.因此,我需要编写一个函数来查找数字是正数,负数还是零而不使用if或for循环,并且只允许使用布尔和位运算符.我做了以下.但是我如何实现它的zero条件?
int status (int x) {
int sign = (x >> 31);
return sign;
}
Run Code Online (Sandbox Code Playgroud)
有什么建议 ?
我编写了一个代码来生成一个包含四列的矩阵,以获得总和等于9的所有数字组合,每个数字从0到9不等.
m = zeros(220, 4);
pd = 9;
i = 1;
for p = 0:1:pd
for q = 0:1:pd-p
for a = 0:1:pd-q-p
m(i,:) = [p, q, a, pd-a-q-p];
i = i+1;
end
end
end
m
Run Code Online (Sandbox Code Playgroud)
现在我想过滤数组没有零,一个零,两个零,三个零.喜欢,三零情况
0 0 0 9
Run Code Online (Sandbox Code Playgroud)
两个零的情况
0 0 1 8
0 0 2 7
.
.
0 0 8 1
Run Code Online (Sandbox Code Playgroud)
一个零例
0 1 1 7
0 1 2 6
.
.
.
0 7 1 1
Run Code Online (Sandbox Code Playgroud)
并且没有零情况
1 1 1 6
1 1 2 …Run Code Online (Sandbox Code Playgroud) 这里我想生成一个位模式来设置n等于1从位置开始的数字p.数字来自0 to 31.以下是我的所作所为.
int bitPattern(int n, int p) {
int hex, num1, num2;
hex = 0x80000000;
num1 = (hex >> (31 - p));
num2 = (hex >> (31 - (n+p)));
return num1 ^ num2;
}
Run Code Online (Sandbox Code Playgroud)
例:
bitPattern(6, 2) should return
..000011111100
Run Code Online (Sandbox Code Playgroud)
有少量运营商的替代解决方案?
任何人都可以解释为什么如果真的isdigit返回2048?我是ctype.h图书馆的新手.
#include <stdio.h>
#include <ctype.h>
int main() {
char c = '9';
printf ("%d", isdigit(c));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我需要从此页面使用以下功能。该SDL_Surface结构被定义为
typedef struct SDL_Surface {
Uint32 flags; /* Read-only */
SDL_PixelFormat *format; /* Read-only */
int w, h; /* Read-only */
Uint16 pitch; /* Read-only */
void *pixels; /* Read-write */
SDL_Rect clip_rect; /* Read-only */
int refcount; /* Read-mostly */
} SDL_Surface;
Run Code Online (Sandbox Code Playgroud)
该函数是:
void set_pixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
{
Uint8 *target_pixel = (Uint8 *)surface->pixels + y * surface->pitch + x * 4;
*(Uint32 *)target_pixel = pixel;
}
Run Code Online (Sandbox Code Playgroud)
在这里我几乎没有疑问,可能是由于缺乏真实的画面。
surface->pitch用 …这是继续我的问题 从现有矩阵中提取矩阵
现在我用代码分离这些矩阵(不正确!)
for i = 3:-1:0
mat = m((sum((m == 0), 2)==i),:)
end
Run Code Online (Sandbox Code Playgroud)
以上部分是我原来问题的更新,我
想相应地命名,比如
mat1
mat2
mat3
mat4
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议一个简单的方法吗?
我正在阅读 K & R 的书The C programming Language来学习 c。它说
由于函数调用的参数是表达式,因此当参数传递给函数时也会发生类型转换。在没有函数原型的情况下,char和short变成int,float变成double。
在过去的几天里,我一直在努力理解这条线。我认为这是很重要的一点。无论我做出什么假设,它都不会实现。有人可以帮助我清楚地理解它吗?
我正在学习C.为什么静态变量不会增加1.
#include <stdio.h>
int foo()
{
static int a = 0;
return a+1;
}
int main()
{
int i;
for (i = 0; i < 10; i = foo())
printf("%d\n", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码中的错误在哪里?
以下是我的代码。我正在尝试打印一个枚举数据类型变量,一个直接使用其名称,另一个使用函数返回与原始变量相同的数据类型。
#include <iostream>
using namespace std;
enum days{SUN, MON, TUE, WED, THU, FRI, SAT};
inline days dayaftertomorrow(days d)
{
return static_cast<days>((static_cast<int>(d) + 2) % 7);
}
ostream& operator<< (ostream& out, days& day)
{
switch(day)
{
case SUN: out << "SUN"; break;
case MON: out << "MON"; break;
case TUE: out << "TUE"; break;
case WED: out << "WED"; break;
case THU: out << "THU"; break;
case FRI: out << "FRI"; break;
case SAT: out << "SAT"; break;
}
return out; …Run Code Online (Sandbox Code Playgroud) 以下代码是我编写的,用于测试我对使用for-loopin的理解,特别是在其中C使用赋值语句for-loop.但在这里我得到了意想不到的输出.为什么不分配0给前10个元素array?
如果我将数组声明为而不是?
为什么它根本不打印?谁能解释一下?arrayarray[10]array[11]
#include <stdio.h>
int main() {
int i, array[11]; //array[10]
for (i = 0; ((i < 10) || (array[i] = 0)); ++i);
for (i = 0; ((i < 10) && (printf("%d\n", array[i]))); ++i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)