-
c中的内存存储分为静态存储区、堆栈区、堆区和**区。
程序中有全局变量、静态变量等的静态存储,这些记忆在程序的持续时间内持续存在。
程序中的自动变量存在于堆栈中,这些变量在函数进入和返回时在堆栈中动态创建和清除。
用户在程序中用 malloc 等请求的内存在堆中,必须由用户显式释放(当然,在程序结束时也会自动释放)。
变量的值存储在变量存储中,例如,你有 int a=3; 假设这是一个全局变量,在程序的静态存储中具有 4 个字节的内存,4b 内存的状态是它的值。
C 不保存变量名,编译器最终会使用内存地址来操作变量内存,只有一些编译器在调试时会把变量名信息放到可执行程序中,因为这不是 C 标准的内容,所以不同的编译器有不同的实现,查阅编译器手册或许能得到一些信息。
C++默认不保存变量类型,RTTI目前在C++中非常有限,标准只在源码级别控制,具体实现由编译器厂商完成,例如,一个类的类型信息,它属于这个类,而不是类的实例, 所以如果要存储这个类的类型信息,可以把类型信息放在程序的静态存储区域,然后在类中再安排一个指针指向那里,这样每个实例在运行时都能得到它的类型信息。
-
因此,int 是编译器自动识别的此问题的内置类型。
a 是一个整数,编译器将此变量放在记录堆栈上变量类型的符号表上。
3 是一个常量,不在堆栈中,而是在赋值后存储在 A 的堆栈空间中。
差不多就是这样。
编译器将自行处理特定问题。
-
sizeof(a)可以看出它应该是4位,在Windows 256*256*sizeof(a)下是A的大小,存储是直接存储的,应该有一个更低的8位。
-
矩阵为:
for(j=0;j 如果 for(j=0; j<=i;j++)原来是 19。
-
亲爱的,如果你不知道这些问题,把它带到编译器并运行它,答案是毋庸置疑的!!
正确答案是 14
-
A是变量名,可以理解a-3指针应该不难理解,a是打开内存。
-
没有必要为 A 腾出更多空间,该地址是 A:3
-
新手前来交流,请指教!
就好像 3 存储在堆中一样,在堆栈中分配了空间 a,并存储了指向 3 的地址。
要确定两个变量是否指向同一个对象,您需要查看它们是否指向同一地址。
-
A 还需要打开空间,用于存储指向空间 3 的地址。
-
a=3,a 的空间是 3,a 只是一个地址。
-
==我不明白你问的问题。。。你能说得更清楚吗?
-
main()
输出为 6; 这里的主要知识是阵列知识。 数组,不管它们有多少维,在内存中都是一维的,可以这么说,一个二维数组可以被认为是这样一个一维数组,而这个一维数组的每个元素都是一维数组,仅此而已。 以一个二维数组为例,数据实际上是被 a[0][0],a[0][1],a[0][2], 压的。
一个[2][2]。 此外,数组名称也是一个指针,指向数组的第一个元素,数组括号中的数字是相对于第一个地址的位置偏移量。 a[3]=*(a+3) 就是这个意思。
所以 p[i]=*(p+i); 也就是说,I 元素与 a[0][0] 偏移。 数组元素按上述顺序排列。 因此可以得出结论,a[1][2]是第6个元素,即5与a[0][0]偏移(a[0][0]是第一个元素),所以a[1][2]=*(p+5); p[5]=5+1=6;所以 a[1][2]=6
如果你不明白,你可以问。
-
#include
#include
#include
#define maxlen 100
typedef int elementtype;
typedef struct
seqlist;
void initial_list(seqlist *l)
int list_length(seqlist l)
void get_element(seqlist l,int i,elementtype *x)
int list_locate(seqlist l,elementtype x)
void list_delete(seqlist *l,int i)
void sort(seqlist *l)
void insert(seqlist *l,elementtype x)
void list_cout(seqlist l)
list_cout(l1);break;
"请输入要插入的元素";cin>>
我为你做了一个程序,你按照你说的做了! 我调试了程序,没问题。
希望您满意!
-
-60(或 -59)。
a++ 是添加的后缀,表达式中使用原始值 6,表达式递增 1
程序分为:a=a-a*a; 这给出了 = 6-6*6 = -30
a = a+a;此步骤给出 = -30 + 30) = -60
出表达式,然后自增量 1,即 a=a+1; a = -60 + 1 = -59.
如果输出:int a=6;
printf("%d", a+=a-=a*a++) 至 -60(原因是添加了后缀,表达式不是自递增的1)。
如果输出:int a=6;
a+=a-=a*a++;
printf("%d",a);获取 -59(因为添加了后缀,并且表达式递增了 1)。
-
本题考量你是否精通表达式的优先级。
1. 计算自增量 1
2. 计算乘法运算。
3.计算减法。
4. 计算加法。
其结果等于:-35
-
返回 A 是 42 猜对了。
-
这个二维数组。
它实际上是一个具有 3 个元素的一维数组,其中数组的元素又是具有 3 个元素的一维数组。
让我们先按行优先级重新排列它:
int a[3][3]=
C 和 C++ 中的数组从 0 开始编号,第 1 行:a[0][0]、a[0][1]、a[0][2] 第 2 行:a[1][0]、a[2][1]、a[1][2] 第 3 行:
a[2][0],a[2][1],a[2][2],然后查看要取的值:**中的a[1][3]? 显然在 a[1][2] 之后,但该值已经超出了数组的范围(数组有 3 个元素),即下标溢出,溢出到 **?
由于多维数组(存储在 C++ 中)等价于连续的一维数组,因此此处的溢出位置正好是 a[2][0] 所在的位置。
现在我可以给你答案:a[1][3]=7
-
我不知道,因为a[0][0]表示第一行的第一列,a[0][1]表示第一行的第二列。
a[1][0] 表示第二行的第一列,a[1][3] 代表第二行的第四列,这个数组是 3 行 3 列,所以不知道 a[1][3] 等于多少,它没有定义。
-
7a[3][3] 是 3 行 3 列。
a[1][3] 是第 2 行的第 4 列(因为数组的下标从 0 开始),但数组中没有第 4 列,第 3 行的第一列是 7
-
这是越界的,但由于二维数组的线性存储性质,a[1][3] 可能是 a[2][0],即 7
我只能说也许
-
输出值为 7完全没问题。