这些是用于2D阵列的符号
char (*names)[5] ;
Run Code Online (Sandbox Code Playgroud)
和
char* names[] = {"Jan","Feb"};
Run Code Online (Sandbox Code Playgroud)
和
char names[3][5] = { Initializers..};
Run Code Online (Sandbox Code Playgroud)
我对这些符号感到非常困惑.
第一个声明名称是指向5个字符数组的指针,即
names -> a char pointer -> "Some string"
Run Code Online (Sandbox Code Playgroud)
第三个存储器映射具有不同的存储器映射,即它与行正常数组一样以行主要顺序存储,与上述不同.
第二种符号与第一种和第三种符号的相似或不同如何?
将它们传递给函数也是完全不同的故事.如果我们将2d数组声明为类型2,那么它将作为双指针(char** names)传递,而如果它是类型1或类型3,则应在声明中提及列.
请帮助我更清楚地了解这些问题.谢谢.
在C中计算后缀表达式时,如果我们的令牌是一个运算符,我们必须将它放在堆栈中,使其具有最高优先级.
我的问题是运营商之间*, /, %,具有最高优先级.
我们还需要考虑关联性吗?由于所有这些运营商都具有LEFT-TO-RIGHT 关联性,因此会/优先于*?
直到值i大于0,main()才会递归调用.一旦它成为0if条件被违反.任何人都告诉我如何执行print语句.当我运行它时,我得到了输出0000.谢谢
void main()
{
static int i=5;
if(--i)
{
main();
printf("%d",i);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在处理该代码,我试图使用x + 1而不是++x结果是无限循环并且在屏幕上打印了零.
这是代码:
#include <stdio.h>
int main(void){
int x;
for(x = 0; x <= 100; x + 1) //instead of ++x
printf("%d\t",x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道这个动作.....为什么编译器没有产生这样的错误,,,,实际发生了什么?!! 并被x++视为x += 1?!
在我的下面的代码中,如果我声明old_act为全局变量,那么该程序工作正常.如果在main中声明:
有人可以帮我理解发生的事情.
void sighandler(int signum)
{
printf("Caught signal:%d pressed ctrl+c!!\n",signum);
}
int main()
{
struct sigaction act_h;
struct sigaction old_act;
act_h.sa_handler = sighandler;
// act_h.sa_flags = SA_RESTART;
sigaction(SIGINT,&act_h,&old_act);
printf("This is an infinite loop\n");
int remain=sleep(10);
printf("remaining time in sec : %d\n",remain);
printf("Before second sleep\n");
sleep(10);
printf("This is an infinite loop\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从gdb看起来有些函数调用发生在非法位置,但不确定:
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/diwakar/Documents/my_C_codes/L2IT/SigHandling/a.out...done.
[New LWP 5661]
warning: Can't …Run Code Online (Sandbox Code Playgroud) 谁能请解释以下程序的输出?如果使用的话我会得到一个无限循环a[i] = 0;,当我使用时会得到一个段错误a[i] = i;,也会在使用时得到i范围,而在给出段错之前0 - 9使用a[i] = 0;它会达到39 a[i] = i;.
#include<stdio.h>
#include<stdlib.h>
int mult(int a, int b);
int main()
{
int a[10];
int i = 0;
for(i=0; i < sizeof(a); i++)
{
a[i] = i;
printf("a[i]=%d i=%d\n", a[i], i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我不明白这行是做什么的:
((struct Example*) 0x10000)
Run Code Online (Sandbox Code Playgroud)
我写了一个测试程序:
#include <stdio.h>
struct Elf{
int bla;
char bla2;
};
int main(){
struct Elf *elfPtr;
printf("Before casting: %p\n", elfPtr);
elfPtr = ((struct Elf *)0x10000);
printf("After casting: %p\n", elfPtr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
在投射之前:0xb776dff4
投射后:0x10000
这条线只做这个吗?
elfPtr = 0x10000
Run Code Online (Sandbox Code Playgroud) 我在学习C方面遇到了一些问题,而且我真的没有其他地方可以提出建议.我来自一系列OOP语言,例如JavaScript和主要是Python,因此C是一个重大变化,我在尝试学习基础知识方面遇到了一些障碍.我最初是从Zed Shaw的"艰难学习C"开始的,但他并没有在书中教授任何东西.是的,他让你写了很多代码并改变了一些东西,但是我不知道为什么代码会工作,而这只会导致更复杂的例子.
我遇到的主要问题是变量和指针之间的区别(我认为它是非常独特的,直到我看到一些我将在下面发布的例子,这完全模糊了两者之间的界限).
例如,我理解声明和初始化一个int被调用的a和一个指针,p看起来像这样:
int a;
int *p;
a = 12;
p = &a;
Run Code Online (Sandbox Code Playgroud)
令我困惑的是当你声明看起来像指针的变量,但根本不是指针(或者它们是什么?).例如:
char *string = "This is a string";
printf("%s\n", string);
Run Code Online (Sandbox Code Playgroud)
什么string时候定义和初始化?它是指针吗?如果是的话,为什么不在printf函数中打印它时取消引用它?有很多像这样的例子让我很困惑.
我遇到的另一个例子没有任何意义:
int i;
scanf("%d", &i);
Run Code Online (Sandbox Code Playgroud)
i当&符号应该引用变量的内存中的位置而不是值时,这个函数如何更新整数的值?阵列和结构变得更加复杂,这是我停下来的地方,我决定要找一些建议.
老实说,我觉得很尴尬发布这样一个菜鸟问题,但每个人都从某个地方开始.这些基础知识是我知道在继续之前需要能够理解的东西,但是当我看到与我刚刚学到的内容相矛盾的代码示例时,我很难理解它.我知道这是一个非常普遍的问题,但我希望你们中的一些人能够解释这些基础知识,或者指出我可以更好地学习/理解这一点的方向.我遇到的大多数视频教程都过于笼统,与在线文本教程相同,他们告诉你如何做某事,但不解释它,这会导致一些严重的问题.
我的数据库中有两个表
表:users与列:id,username,emailETCS
表:users_messages列:id, to, from, messages,sent_time
列to和from是关键users从users表。问题是我需要:
“从用户名和消息中选择所有用户”。
例如,如果表行如下所示:
From, To, Message
11, 14, Hi, How are you
14, 11, Hello,
Run Code Online (Sandbox Code Playgroud)
如果 11 是 john 而 14 是 mark,那么我需要这样的输出:
From, To, Message
john, mark, Hi, How are you
mark, john, Hello,
Run Code Online (Sandbox Code Playgroud)
通过我的查询,我只能从列或到列获取用户名,但不能同时获取两者的用户名。我怎样才能执行一个查询,让我从和到两个用户名?
以下查询给了我空结果:
SELECT u.username, m.message, m.from, m.to
FROM `users_messages` m, `users` u
where
m.from = …Run Code Online (Sandbox Code Playgroud) 有一个问题要打印值的地址:
char word[] = "hi there"; //print address of string
int a = 1; // print address of 1
Run Code Online (Sandbox Code Playgroud)
我知道如何打印变量的地址,我认为值在变量地址内?那么值的地址实际上是变量地址?
这是一个棘手的问题,我是对的吗?
提前致谢