Q.1写下最小的可执行代码?
Ans。 main是执行代码所必需的。代码是
C
void main()
{
}
C
// C program to demonstrate shallow copy
# include
# include
# include
struct test
{
char *str;
};
int main()
{
struct test st1, st2;
st1.str = (char *)malloc(sizeof(char) * 20);
strcpy(st1.str, "GeeksforGeeks");
st2 = st1;
st1.str[0] = 'X';
st1.str[1] = 'Y';
/* Since copy was shallow, both strings are same */
printf("st1's str = %s\n", st1.str);
printf("st2's str = %s\n", st2.str);
return 0;
}
C
// C program to demonstrate deep copy
# include
# include
# include
struct test
{
char *str;
};
int main()
{
struct test st1, st2;
st1.str = (char *)malloc(sizeof(char) * 20);
strcpy(st1.str, "GeeksforGeeks");
st2 = st1;
// We add extra statements to do deep copy
st2.str = (char *)malloc(sizeof(char) * 20);
strcpy(st2.str, st1.str);
st1.str[0] = 'X';
st1.str[1] = 'Y';
/* Since copy was deep, both strings are different */
printf("st1's str = %s\n", st1.str);
printf("st2's str = %s\n", st2.str);
return 0;
}
Q.2什么是入口控制和出口控制回路?
Ans。 C仅支持2个循环:
- 进入控制:此循环分为两部分
一种。 while循环
b。 for循环 - 退出控制:在此类别中,有一种类型的循环称为
一种。做while循环。
Q.3为什么预处理器指令最后没有分号?
Ans。编译器需要分号,顾名思义,预处理器是在编译之前处理我们的源代码的程序。因此,不需要分号。
Q.4包含带有尖括号<>的头文件和双引号”“之间的区别是什么?
Ans。如果<>中包含头文件,则编译器仅在内置包含路径中搜索特定的头文件。如果“”中包含头文件,则编译器将首先在当前工作目录中搜索特定的头文件,如果找不到,则在内置include路径中进行搜索。
Q.5近,远和巨大指针有什么区别?
Ans。这些是MS DOS时代在16位Intel体系结构中使用的一些旧概念,不再有用。
Near指针用于在16位计算机上的当前段中存储16位地址。局限性在于我们一次只能访问64kb的数据。
远端指针通常是32位,可以访问当前段外部的内存。要使用此功能,编译器会先分配一个段寄存器来存储段地址,然后再分配另一个寄存器来存储当前段内的偏移量。
像远指针一样,大指针通常也是32位的,并且可以访问外部段。在远指针的情况下,段是固定的。在远指针中,段部分无法修改,但在“巨大”中可以修改
Near Pointer | Far Pointer |
---|---|
It’s size is 2 bytes | Its size is 4 bytes |
They have the address in between 0-65535(i.e in user area) | They have the address more than 65535(i.e out of user area) |
For Example: simple pointers, which we normally studied in C and C++ |
Pointers which are used in devices, running program, i.e to attack on other computers via this far pointers. |
Q.6为什么不存在“类型降级”而不是“类型提升”?而且,与通过类型提升进行操作相比,它将消耗更少的空间资源。
Ans。让我们以一个例子来理解它。
认为
双倍a = 1.5; int b = 10并且我们要计算a + b
通过降级类型,浮点型a将转换为int。因此,a = 1和a + b = 1 + 10 = 11,但是我们知道正确答案是11.5,这只能通过类型提升来获得。因此,结论是通过类型降级,我们将无法获得正确的答案。
Q.7什么是堆栈区和堆区?
- 堆区:用于动态分配的对象(使用malloc()和calloc())。
- 堆栈区:用于存储方法的局部变量和参数。这仅在该特定方法终止之前一直保留在内存中。
有关详细信息,请参考堆栈与堆内存。
Q.8 C语言中的#include和Java的import之间的区别?
Ans。
#include | import |
---|---|
#include is a statement not a keyword. |
While import is a keyword. |
It is processed by pre-processor software. | It is processed by compiler. |
It increases the size of the code. | It doesn’t increases the size of the code. Here, even if we write import java.lang.*; it will not attach all the class. Rather it will give permission to access the class of java.lang |
Q.9 ++ * p,* p ++和* ++ p之间的区别?
1)前缀++和*的优先级相同。两者的关联性是从右到左。
2)后缀++的优先级高于*和前缀++。后缀++的关联性从左到右。
(请参阅:优先级表)
表达式++ * p具有两个相同优先级的运算符,因此编译器会寻找关联性。运算符的关联性从右到左。因此,该表达式被视为++(* p) 。因此,第一个程序的输出为“ arr [0] = 10,arr [1] = 20,* p = 11 ”。
由于后缀++的优先级高于*,因此表达式* p ++被视为*(p ++) 。因此,第二个程序的输出为“ arr [0] = 10,arr [1] = 20,* p = 20 ”。
表达式* ++ p具有两个相同优先级的运算符,因此编译器会寻找关联性。运算符的关联性从右到左。因此,该表达式被视为*(++ p) 。因此,第三个程序的输出为“ arr [0] = 10,arr [1] = 20,* p = 20 ”
有关详细信息,请参阅++ * p,* p ++和* ++ p之间的区别。
Q.10用示例解释深层复制和浅层复制吗?
在下面的C程序中,结构变量st1包含指向动态分配的内存的指针。当我们将st1分配给st2时,st2的str指针也开始指向相同的内存位置。这种复制称为“浅复制” 。
C
// C program to demonstrate shallow copy
# include
# include
# include
struct test
{
char *str;
};
int main()
{
struct test st1, st2;
st1.str = (char *)malloc(sizeof(char) * 20);
strcpy(st1.str, "GeeksforGeeks");
st2 = st1;
st1.str[0] = 'X';
st1.str[1] = 'Y';
/* Since copy was shallow, both strings are same */
printf("st1's str = %s\n", st1.str);
printf("st2's str = %s\n", st2.str);
return 0;
}
st1's str = XYeksforGeeks
st2's str = XYeksforGeeks
要进行Deep Copy ,我们为动态分配的成员分配新内存,并显式复制它们。
C
// C program to demonstrate deep copy
# include
# include
# include
struct test
{
char *str;
};
int main()
{
struct test st1, st2;
st1.str = (char *)malloc(sizeof(char) * 20);
strcpy(st1.str, "GeeksforGeeks");
st2 = st1;
// We add extra statements to do deep copy
st2.str = (char *)malloc(sizeof(char) * 20);
strcpy(st2.str, st1.str);
st1.str[0] = 'X';
st1.str[1] = 'Y';
/* Since copy was deep, both strings are different */
printf("st1's str = %s\n", st1.str);
printf("st2's str = %s\n", st2.str);
return 0;
}
st1's str = XYeksforGeeks
st2's str = GeeksforGeeks
相关文章:
1. https://www.geeksforgeeks.org/commonly-asked-c-programming-interview-questions-set-1/
2. https://www.geeksforgeeks.org/commonly-asked-c-programming-interview-questions-set-2/