当前位置 : 主页 > 编程语言 > c语言 >

课后做题总结

来源:互联网 收集:自由互联 发布时间:2023-09-03
声明和定义 1.在C语言中函数可以嵌套调用,但不可以嵌套定义2.传值调用与传址调用,传值:形参是实参的临时拷贝,修改形参不会改变实参。传址:形参按照指针方式传递,将来形参
声明和定义

1.在C语言中函数可以嵌套调用,但不可以嵌套定义2.传值调用与传址调用,传值:形参是实参的临时拷贝,修改形参不会改变实参。传址:形参按照指针方式传递,将来形参就是实参地址的一份拷贝,形参指向的是实参,修改形参指针指向的内容,  就是在操作实参。

3.形参与实参可以同名,因为两者在不同作用域中。

4.递归会造成栈溢出。因为每次递归,相当于都是一次新的函数调用,而每次函数调用系统必须给该函数划分栈帧空间,内部的递归函数没有退出,上层的递归就不能退

出,栈帧就会累积许多块.

5.int arr[] = {1,2,(3,4),5} 的实际形式为.int arr[] = {1,2,,4,5}。(3,4)取逗号后面的值

6.sizeof(str)与strlen(str), sizeof的计算包含\o, strlen的计算不包含\0

算数转换

1.野指针指向的空间时非法的,或者说该指针指向的空间已经不存在了,因此野指针不能使用。(指向位置不确定的指针被称为野指针

2. 32位系统下: int占4个字节,指针表示地址空间个数,总共有2^32个,故占4个字节

    64位系统下: int占4个字节,指针表示地址空间个数,总共有2^64个,故占8个字节

3.i 没有初始化,默认值为0;i--值为-1, 但由于sizeof()为无符号整型所以将i强制转换为无符号整形。所以输出为“>”。

#include <stdio.h>
int i;    
int main()
{
    i--;
    if (i > sizeof(i))   //  因为sizeof  为无符号整型 所以强制转换i
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0; 
}
指针类型

1 *(p+i), 指针类型  int  每次加四个字节  short  2个字节  依次类推    (i代表变量累加数)

unsigned long pulArray[] = {6,7,8,9,10};    //   无符号长整形数组
unsigned long *pulPtr;    //  无符号长整形数组   占用4个字节空间
pulPtr = pulArray;    //  取首地址
*(pulPtr + 3) += 3;  //  第三个元素加3为12   原数组变为 {6,7,8,12,10}
printf("%d,%d\n",*pulPtr, *(pulPtr + 3));    //  打印第一个元素 与第三个元素   故输出为 6 与12 

2    两个指针相减,指针必须指向一段连续空间,减完之后的结构代表两个指针之间相差元素的个数

指针中存储的是地址,地址可以看成一个数据,因此可以比较大小。

3    指针数组与数组指针的概念  (看最后两个字,若为指针则为指针,  若为数组则为数组)

      指针数组  数组中的每个元素都是指针 int* arr[10];   数组指针  指向数组的指针 int (*arr)[10];

4    存储地址与强制转换:  地址存储的规则是 从右往左开始存储

#include <stdio.h>
int main()     
{
    int a = 0x11223344;     //0x64| 44 |  0x65| 33 |  0x66| 22 |   0x67| 11 |
    char *pc = (char*)&a;   
    *pc = 0;
    printf("%x\n", a);
    return 0;
}    


【转自:香港服务器 https://www.68idc.cn提供,感谢支持】
网友评论