我知道填充,它的规则,它为什么需要等.
我的问题是结构,
struct my_struct {
int a;
char c;
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,c的起始地址是字对齐,但仍然编译器添加3个字节(假设4作为字大小)填充.在c之后没有元素,为什么我们需要这3个字节?我查了下面的,
int g_int1;
struct my_struct st;
int g_int2;
Run Code Online (Sandbox Code Playgroud)
通过以上我的意思是我的其余变量声明不依赖于先前变量大小的单词align-ness.编译器总是尝试对齐下一个变量,而不管其全局或局部自动变量.
我看不出有任何关于endian-ness的原因,因为这是char并且对于一个字节它并不重要.我认为是什么原因而不是检查最后一个元素条件编译器总是在需要时添加填充.
什么能有正当理由?
当gcc生成asm代码时,内联函数将被其代码替换.
使用内联递归函数时的行为是什么
inline int fact (int n)
{
if (n<=1)
return 1;
else
return (n * fact(n-1));
}
Run Code Online (Sandbox Code Playgroud)
我生成asm代码,gcc -S当递归函数带有inline前缀时,当递归函数没有inline前缀时,我发现两种情况的asm代码是相同的.
你对此有任何解释吗?
是否可以通过这种方式初始化互斥锁:
pthread_mutex_t mutex = {0};
Run Code Online (Sandbox Code Playgroud)
以下3个互斥锁初始化有什么区别:
1) pthread_mutex_init(&mutex, NULL);
2) pthread_mutex_t mutex = {0};
3) pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
Run Code Online (Sandbox Code Playgroud) 问题:如何开发算法将所有设置位(1)以32位整数移位到右侧
例
V= 0b01001000110010
Run Code Online (Sandbox Code Playgroud)
将V包含5位集,如果我们将其转移到我们得到正确的:
V = 0b011111
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
v = v - ((v >> 1) & 0x55555555); // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count
Run Code Online (Sandbox Code Playgroud)
上面的代码返回32位整数的设置位数
并使用以下代码
c = (1<<c) - 1;
Run Code Online (Sandbox Code Playgroud)
我们将第c一个位设置为1.释
还有其他算法比上述解决方案更好吗?
是否有可能只使用位运算(&,|,^,~, …
struct abc
{
//some members
}arrayOf[10];
struct def
{
//some data memebers
}obj;
typedef void (*abc) (obj)
Run Code Online (Sandbox Code Playgroud)
我不确定该陈述的typedef void (*abc) (obj)含义是什么.请考虑我是新手.
有人告诉我,char比较if(c>='a' && c<='z')不便携.
例
int main() {
char c;
scanf("%c", &c);
if(c>='a' && c<='z')
printf("lower case\n");
}
Run Code Online (Sandbox Code Playgroud)
任何证据表明char比较if(c>='a' && c<='z')不可移植?
我有以下字符串,其中包含以空格分隔的单词
str="word1 word2 word3"
Run Code Online (Sandbox Code Playgroud)
如何统计单词数量?
我不想在计数器上使用for循环.我想在一个命令中完成它.
我有一个包含以下格式的数据的文件:
{"parameter":"toto.tata.titi", "value":"0/2", "notif":"1"}
Run Code Online (Sandbox Code Playgroud)
我使用sed对文件进行了更改:
sed -i "/\<$param\>/s/.*/$line/" myfile
Run Code Online (Sandbox Code Playgroud)
哪个line变量是
{"parameter":"toto.tata.titi", "value":"0/2", "notif":"3"}
Run Code Online (Sandbox Code Playgroud)
和param变量是toto.tata.titi
以上sed命令返回错误:
sed: unmatched '/'
Run Code Online (Sandbox Code Playgroud)
因为line变量包含/==>"0/2"
即使line变量包含,如何更新我的sed命令使其工作/?
我有字符串看起来像这样
string="xxxxx.yyyyy[2].zzzzz"
Run Code Online (Sandbox Code Playgroud)
我想提取之间的数字[ ].我使用了以下awk命令
echo $string | awk -F'[]' '{print $2}'
Run Code Online (Sandbox Code Playgroud)
但是此awk命令返回错误:
awk: bad regex '[]': Unmatched [ or [^
Run Code Online (Sandbox Code Playgroud)
如何解决?
我添加了一个别名:
$ alias anyalias="echo kallel"
Run Code Online (Sandbox Code Playgroud)
如果我执行:
$ anyalias
kallel
Run Code Online (Sandbox Code Playgroud)
它执行echo命令没有任何问题.
现在,如果我以这种方式定义变量:
$ var="anyalias"
Run Code Online (Sandbox Code Playgroud)
然后以这种方式执行:
$ $var
-ash: anyalias: not found
Run Code Online (Sandbox Code Playgroud)
然后我收到了一个shell错误.
如何$var运行anyalias别名中定义的命令?
我不打算改变打电话的方式$var.但我正在寻找一种方法来改变别名的定义或导出它.