C語言面試題/筆試題/高頻面試題_2

9. 全局變量和局部變量的區別

定義:全局變量是定義在函數外部的變量,局部變量是定義在 函數內部的變量

存儲位置:全局變量存儲在全局區,局部變量存儲在棧

作用域:全局變量可以在程序任意位置使用,局部變量只能在函數內部使用

生命周期:全局變量的生命周期為整個程序,程序結束空間釋放,局部變量生命周期為本函數,函數結束空間釋放

初始化:全局變量未初始化初 值為0,局部變量未初始化時值為隨機值

11.memcpy和strcpy的區別?

  1. 拷貝內容:
  1. memcpy:memcpy 是用于拷貝指定大小的數據塊(字節),它不會自動檢測字符串結束符('\0'),因此適用于拷貝任意數據,包括字符串和非字符串數據。
  2. strcpy:strcpy 是用于拷貝第一個以 '\0' 結尾的字符串,它會自動拷貝整個字符串,包括字符串結束符 '\0'。
  1. 參數:
  1. memcpy:memcpy 的函數原型為 void *memcpy(void *dest, const void *src, size_t n);,其中 dest 是目標地址,src 是源地址,n 是拷貝的字節數。
  2. strcpy:strcpy 的函數原型為 char *strcpy(char *dest, const char *src);,其中 dest 是目標字符串的地址,src 是源字符串的地址。
  1. 安全性:
  1. memcpy:memcpy 不會檢查目標地址是否足夠大,如果目標地址空間不夠大,可能會發生緩沖區溢出的問題,導致程序崩潰或數據損壞。因此,在使用 memcpy 時需要確保目標地址有足夠的空間來容納源數據。
  2. strcpy:strcpy 會自動添加字串結束符 '\0',但如果源字符串太長,超出了目標字符串的空間也會導致緩沖區溢出問題。因此,使用 strcpy 時應留足夠的空間來·容納源字符串。
  1. 性能:
  1. memcpy:memcpy 是按字節拷貝數據,因此在拷貝大塊數據時比較高效。
  2. strcpy:strcpy 需要遍歷整個源字符串直到遇到字符串結束符 '\0',因此在拷貝較長字符串時性能可能較差。

12. 什么是段錯誤?怎么解決段錯誤?

當程序嘗試訪問它沒有權限訪問的內存地址時

段錯誤通常是由以下幾種情況引起的:

  1. 訪問空指針: 當程序試圖訪問一個空指針所指向的內存地址時,就會發生段錯誤。例如,未初始化的指針或者指向已釋放的內存的指針。
  2. 數組越界: 當程序試圖訪問數組越界的元素時,就會發生段錯誤。例如,訪問數組下標小于 0 或者大于等于數組大小的元素。
  3. 非法內存訪問: 當程序試圖訪問未分配的內存區域,或者試圖訪問系 統保留的內存區域,就會發生段錯誤。
  4. 對只讀內存的寫操作:當程序試圖對只讀內存進行寫 操作時,例如對常量字符串進行修改,就會發生段錯誤。

要解決段錯誤問題,可以通過以下幾種方式:

  1. 檢查空指針: 在使用指針之前,先確保指針m不是空指針。可以使用條件語句或者斷言來檢查指針是否為空。
  2. 數組邊界檢查: 在訪問數組元素之前,先確保訪問的下標在合法的范 圍內。
  3. 動態內存管理: 在動態分配內存(例如使用 malloc、calloc、new m等函數)后,要確保在不再使用該內存時釋放它(例如使用 free、 delete 等函數)。
  4. 避免對只讀內存進行寫操作: 對于常量字符串或者是只讀內存區域,避免對其進行寫操作,可以使用 const 關鍵字來聲明指向只讀內存的 指針。
  5. 使用工具檢查: 可以使用一些工具,如 Valgrind,在程序運行時檢查內存錯誤,包括段錯誤、內存泄漏等

13.什么是內存泄漏?什么是野指針?

內存泄漏(Memory Leak): 內存泄漏是指程序在動態分配內存后,未釋放不再使用的內存,導致這部分內存永遠無法被回收,從而造成內存的浪費。如果程序中存在內存泄漏,隨著程序的執行,內存占用會逐漸增加,最終可能導致程序崩潰或系統資源耗盡。內存泄漏的常見原因包括:

  1. 忘記釋放通過 malloc、calloc、new 等動態分配的內存。
  2. 在循環或迭代過程中,每次分配內存卻未及時釋放導致累積。
  3. 保存了指向動態分配內存的指針,但在后續程序中指針又指向其他位置從而丟失了釋放的機會。

野指針(Wild Pointer): 野指針是指指向未知或者無效內存地址的指針。野指針通常產生于以下幾種情況:

  1. 內存釋放后未置空:指針指向的內存已經被釋放,指針沒有置為 nullptr 或 NULL。
  2. 指針越界訪問:?指針指向的內存已經被釋放,但程序繼續使用該指針指針未初始化:指針沒有初始化,即沒有賦予合法的地址,指針的初始值是隨機的。

編程題:

1.define比較兩個數的大小

#define MIN(a, b) ((a) < (b)?(a) : (b))

2.將字符串逆序輸出

void reverseString(char *str) {		int length = strlen(str);char *start = str;char *end = str + length - 1;while (start < end) {char temp = *start;*start = *end;*end = temp;start++;end--;}
}int main() {char str[] = "Hello, World!";printf("原始字符串:%s\n", str);reverseString(str);printf("逆序輸出:%s\n", str);return 0;
}

3.冒泡排序

void bubbleSort(int arr[], int n) {int i, j;for (i = 0; i < n-1; i++) {// 每次循環將最大的元素冒泡到末尾,因此每輪循環只需比較前 n-i-1 個元素for (j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {// 如果前一個元素大于后一個元素,則交換它們的位置int temp = arr[j];     //arr[j] ^= arr[j + 1];arr[j] = arr[j+1];     //arr[j + 1] ^= arr[j];arr[j+1] = temp;       //arr[j] ^= arr[j + 1];}}}
}

4.strlen、strcpy、strcat、strcmp

size_t my_strlen(const char *str) { size_t len = 0;while (*str) {len++;str++;}return len;
}char *my_strcpy(char *dest, const char *src) {char *temp = dest;	// 暫存dest字符串的首地址while (*src) {*dest = *src;                      dest++;src++;}*dest = '\0'; // 在目標字符串末尾加上 null 終止符return temp;
}char *my_strcat(char *dest, const char *src) {char *temp = dest;                                                                                                                        // 移動 dest 指針到目標字符串的末尾while (*dest) {dest++;}// 將源字符串復制到目標字符串的末尾while (*src) {*dest = *src;dest++;                                                                 src++;}// 添加目標字符串的 null 終止符*dest = '\0';return temp;
}#include <stdio.h>int my_strcmp(const char *str1, const char *str2) {while (*str1 && *str2) {if (*str1 != *str2) {return *str1 - *str2;}str1++;str2++;} // 如果兩個字符串長度不等,返回長度差值return *str1 - *str2;
}int main() {const char *str1 = "apple";const char *str2 = "banana";int result = my_strcmp(str1, str2);if (result < 0) {printf("%s 小于 %s\n", str1, str2);} else if (result == 0) {printf("%s 等于 %s\n", str1, str2);} else {printf("%s 大于 %s\n", str1, str2);}return 0;
}

5.打印楊輝三角前10行

#include <stdio.h>
int main(int argc, char const *argv[])
{int a[10][10] = {0}, i, j;for (i = 0; i < 10; i++){a[i][0] = 1;for (j = 1; j <= i; j++)a[i][j] = a[i - 1][j] + a[i - 1][j - 1];}for (i = 0; i < 10; i++){for (j = 0; j <= i; j++)printf("%-5d", a[i][j]);putchar('\n');}return 0;
}運行上述代碼,將會輸出楊輝三角的前10行:Copy code
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1
每一行的數字都代表一個組合數,它是由 C(n, k) 組成,其中 n 為行數減1,k 為列數減1。在這個例子中,C(n, k) = triangle[n][k]。

6.atoi函數自定義

7.定義一個函數計算一個字節里(byte)里面有多少bit被置1/

int count(int x+)

{

int num=0;

for (int i = 0; i < 8; i++)//一個字節是8位

{

if((x&(1<<i))!=0)

num++;

}

return num;

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62449.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62449.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62449.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Brain.js(八):RNNTimeStep 實戰教程 - 股票價格預測 - 實操需警慎

前置聲明&#xff0c;個人淺度炒股&#xff0c;但計劃將基金轉入股市。然后 股市有風險&#xff0c;不是技術可以完全預測的&#xff0c;但是在無頭緒的時候&#xff0c;用技術指標做個參考也不錯。 本文涉及到的股票預測&#xff0c;只是代碼簡單示例&#xff0c;實操需警慎&a…

MySQL | 尚硅谷 | 第13章_約束

MySQL筆記&#xff1a;第13章_約束 文章目錄 MySQL筆記&#xff1a;第13章_約束第13章_約束 1. 約束(constraint)概述1.1 為什么需要約束1.2 什么是約束1.3 約束的分類演示代碼 2. 非空約束2.1 作用2.2 關鍵字2.3 特點2.4 添加非空約束2.5 刪除非空約束演示代碼 3. 唯一性約束3…

《計算機網絡》(408大題)

2009 路由轉發和靜態路由的計算 子網劃分、路由聚合的計算 注&#xff1a;CIDR中的子網號可以全為0或1&#xff0c;但是其主機號不允許。 注&#xff1a; 這里其實是把到互聯網的路由當做了一個默認路由&#xff08;當一個目的網絡地址與路由表中其他都不匹配時&#xff0c;…

NanoLog起步筆記-6-StaticLogInfo

nonolog起步筆記-6-StaticLogInfo StaticLogInfo文件名和行號文件名和行號的傳入log參數 RuntimeLogger::registerInvocationSitelogid為什么只能被賦一次值 reserveAlloc加入消息頭finishAlloc返回 StaticLogInfo 寫C語言編譯前端時&#xff0c;給我印象深刻的一部分是&#…

軟件工程 概述

軟件 不僅僅是一個程序代碼。程序是一個可執行的代碼&#xff0c;它提供了一些計算的目的。 軟件被認為是集合可執行的程序代碼&#xff0c;相關庫和文檔的軟件。當滿足一個特定的要求&#xff0c;就被稱為軟件產品。 工程 是所有有關開發的產品&#xff0c;使用良好定義的&…

Sui 集成 Phantom,生態迎來全新里程碑

作為領先的非托管多鏈加密&#x1f45b;&#xff0c;Phantom 宣布將支持 Sui 區塊鏈。Sui 將加入 Solana、Bitcoin 和 Ethereum 隊伍&#xff0c;成為該 wallet 支持的少數 L1 區塊鏈之一。 此次集成也大幅提升了 Phantom 的互操作性&#xff0c;同時表明 wallet 提供商和應用…

目標跟蹤領域經典論文解析

親愛的小伙伴們&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你對深度學習的奧秘、JAVA 、PYTHON與SAP 的奇妙世界&#xff0c;亦或是讀研論文的撰寫攻略有所探尋&#x1f9d0;&#xff0c;那不妨給我一個小小的關注吧&#x1f970;。我會精心籌備&#xff0c;在…

如何解決 java.nio.charset.CoderMalfunctionError: 編碼器故障錯誤問題?親測有效的解決方法!

java.nio.charset.CoderMalfunctionError 是一個在 Java 中相對較少遇到的異常&#xff0c;通常與字符編碼轉換過程中的錯誤有關。當 Java 程序在進行字符編碼轉換時&#xff0c;遇到無法處理的字符或編碼故障時&#xff0c;就會拋出該異常。 1. 問題描述 java.nio.charset.C…

低級爬蟲實現-記錄HCIP云架構考試

因工作需要考HCIP云架構&#xff08;HCIP-Cloud Service Solution Architect&#xff09;證書, 特意在淘寶上買了題庫&#xff0c; 考過了。 事后得知自己被坑了&#xff0c; 多花了幾十大洋。 所以想著在授權期內將題庫“爬”下來&#xff0c; 共享給大家。 因為整個過程蠻有…

QGroundControl之5-AppSettings.cc

介紹 應用程序設置 Application Settings &#xff0c;這里看下語言選擇功能&#xff0c;它是怎么和json文件關聯起來的&#xff0c;剛剛看的時候&#xff0c;很是奇怪這么多的json文件作用。 1.AppSettings.cc 文件怎么和App.SettingsGroup.json關聯 在AppSettings.cc文件沒…

jenkins郵件的配置詳解

Jenkins郵件的配置涉及多個步驟和細節,以下是詳細的配置指南: 一、前期準備 確定郵件服務:明確Jenkins將要使用的郵件服務,如QQ郵箱、163郵箱、公司郵箱(基于Microsoft 365或Exchange Server)等。獲取SMTP配置信息:根據郵件服務類型,獲取相應的SMTP服務器地址、端口號…

【ArcGIS微課1000例】0134:ArcGIS Earth實現二維建筑物的三維完美顯示

文章目錄 一、加載數據二、三維顯示三、三維符號化一、加載數據 加載配套實驗數據(0134.rar中的建筑物,2d或3d都可以),方法如下:點擊添加按鈕。 點擊【Add Files】,在彈出的Open對話框中,選擇建筑物,點擊確定,完成添加。 默認二維顯示: 二、三維顯示 右鍵建筑物圖層…

jupyterlab 增加多個kernel,正確做法

1、背景 需要增加一個kernel然后相當于隔離一個環境 juypterlab Version 3.0.14 2、用conda 安裝 例如&#xff0c;你在conda下有一個python 3.12 的環境 py312 ipython kernel install --user --namepy312 如果保持的話&#xff0c;用pip安裝相應的包就好 3、檢查是否配置好 …

案例-商品列表(組件封裝)

標簽組件封裝 1.雙擊顯示&#xff0c;自動聚焦 2.失去焦點&#xff0c;隱藏輸入框 標簽一列&#xff0c;不同行的標簽內容不同&#xff0c;但是除此之外其他基本一致&#xff0c;所以選擇用 標簽組件 將這一部分封裝為一個組件&#xff0c;需要時組件標簽展示。 首先標簽處一進…

Python 基礎學習(一)

一.基礎語法 注釋 Python中單行注釋以 # 開頭&#xff0c;如下&#xff1a; #!/usr/bin/python3# 第一個注釋 print ("Hello, Python!") # 第二個注釋多行注釋可以用多個 # 號&#xff0c;還有 ‘’’ 和 “”"&#xff1a; #!/usr/bin/python3# 第一個注釋…

TIM輸入捕獲---STM

一、簡介 IC輸入捕獲 輸入捕獲模式下&#xff0c;當通道輸入引腳出現指定電平跳變時&#xff0c;當前CNT的值將被鎖存在CCR中&#xff0c;可用于測量PWM波形的頻率、占空比、脈沖間隔、電平持續時間等參數 每個高級定時器和通用定時器都擁有4個輸入捕獲通道 可配置為PWMI模…

【Android Studio】學習——網絡連接

實驗&#xff1a;Android網絡連接 文章目錄 實驗&#xff1a;Android網絡連接[toc]實驗目標和實驗內容&#xff1a;1、掌握Android聯網的基本概念&#xff1b;2、能夠使用URL connection實現網絡連接&#xff1b;3、掌握第三方庫的基本概念4、需實現的具體功能 實驗結果功能說明…

ROS學習筆記二:ROS環境搭建

安裝ubuntu安裝ROS 參考趙虛左老師教程&#xff1a;ROS安裝ROS 快速上手體驗 -使用命令來實現 –創建工作空間&#xff1a; mkdir -p ros_learn_ws/src// ros_learn_ws為自定義空間 cd ros_learn_ws catkin_make –創建ROS功能包并添加依賴 cd src catkin_create_pkg demo_01 r…

5G中什么是ATG網絡?

有人問Air to Ground Networks for NR是怎么回事&#xff1f;這個是R18 NR才引入的。 ATG很多部分和NTN類似中的內容類似。比較明顯不同的是&#xff0c;NTN的RF內容有TS 38.101-5單獨去講&#xff0c;而ATG則會和地面網絡共用某些band&#xff0c;ATG可以工作在N1/N3/N34/N39…

基礎算法--雙指針

兩數之和 點擊&#xff1a;題目鏈接 解法一&#xff1a;暴力解法 時間復雜度&#xff1a;O(N^2) 算法思路&#xff1a;兩層for循環即可列出所有兩個數字的組合&#xff0c;判斷是否等于目標值 算法流程&#xff1a; 兩層 for 循環&#xff1a; 外層 for 循環依次枚舉第?個…