第37节 面试题分析

-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.

第一:

指针运算
必考知识点

#include <stdio.h>

//二维数组名代表 数组首元素
//二维数组是以一维数组存在的
//指针运算

void main()
{
    int TestArray[5][5] = { {11,12,13,14,15},
                            {16,17,18,19,20},
                            {21,22,23,24,25},
                            {26,27,28,29,30},
                            {31,32,33,34,35}
                          };

    //TestArray[5][5]的位置
    int* p1 = (int*)(&TestArray + 1);   
        
    //TestArray + 1  数组第二个位置 
    //*(TestArray + 1) 数组第二个位置({16,17,18,19,20})的地址
    // (*(TestArray + 1) + 6) 16是第0位,向后移6位是22
    int* p2 = (int*)(*(TestArray + 1) + 6);      

    //*TestArray 代表数组{11,12,13,14,15} ;  *(*TestArray) 代表11
    //*(*(TestArray + 1)) 代表 16
    //TestArray + 3 代表 {26,27,28,29,30} ; *(TestArray + 3) + 3 代表 29的地址
    //p1代表{31,32,33,34,35} p1[-8]代表35向后数8位 是 27
    //p2代表22;p2[4]向后移4位 是 26
    printf("Result: %d; %d; %d; %d; %d\n", *(*TestArray), *(*(TestArray + 1)), 
                                           *(*(TestArray + 3) + 3), p1[-8], 
                                           p2[4]);
}

第37节 面试题分析

第二:

调试经验

#include<stdio.h>

void main()
{
    char* p = "hello world!";
    int a = (int)p;
    short s = 'c';

    //int printf (const char *__format, ...) 可变参数
    //可变参数宏无法判断参数的实际类型
    printf("%c\n", (long)(*((int*)p)));//%c只取一个字节  那就只取字符串第一个字节h
    printf("%s\n", a);                 //%s  a代表字符串首地址
    printf("%s\n", &s);                //short类型2个字节  c 0 为字符串
}

第37节 面试题分析

第三:

安全编程

#include<stdio.h> 

int main(int argc, char *argv[]) 
{ 
    int flag = 0; 

    char passwd[10];   //这里字符串预定义只有10位

    memset(passwd,0,sizeof(passwd)); 

    strcpy(passwd, argv[1]);           //strcpy函数有可能存在 数组越界 !!!!
    //strncpy(passwd, argv[1],9);      //带n的字符串安全性较高

    if(0 == strcmp("LinuxGeek", passwd)) 
    { 
        flag = 1; 
    } 

    if( flag ) 
    { 
        printf("\n Password cracked \n"); 

    } 
    else 
    { 
        printf("\n Incorrect passwd \n"); 
    } 

    return 0; 

}