C语言逗号表达式赋值、野指针成因、用户标识符、字符串赋值的几个概念
目錄
題目
背景概念梳理
逗號表達式
野指針成因
用戶標識符
字符串賦值
解題過程
正確答案
整體代碼
參考鏈接
題目
一、輸出x及a的結果
int main(){int x,a;x = (a=3, a+1); }二、野指針都是由指針未初始化導致的嗎?
三、如下不能定義為用戶標識符的是?
A, Main B, _0 C, _int D, sizeof四、如下正確進行字符串賦值操作的是?
A,char s[5] = {"ABCDE"}; B, char s[5] = {'A','B','C','D','E'}; C,char* s; s = "ABCDE";背景概念梳理
逗號表達式
????????逗號表達式的結果是逗號表達式中最后一個式子的值。逗號表達式分兩種,一種是“(a,b,c,d)”該值返回的是d值(返回最后一個式子的值);另一種,"a,b,c,d"返回的是a值。
int main(){int x,y,z,a;x = (a=3, a+1);printf("x: %d\n",x); printf("a: %d\n",a); y = (a, a+3, a+2);printf("y: %d\n",y); z = a, a+5, a+6;printf("z: %d\n",z); } //結果輸出: x: 4 a: 3 y: 5 z: 3 -------------------------------- Process exited after 0.02346 seconds with return value 5 請按任意鍵繼續. . .野指針成因
?????????如果說野指針問題,誰都知道野指針是由于未對指針變量初始化導致的,但如果說所有的野指針都是由于指針變量未初始化導致的嗎?恐怕會打鼓,但有一時想不出還有其他的例子(我就是),
????????野指針的定義是指向不可以地址(非法內存地址)的指針。
????????按這個定義舉例,除了未初始化還是有一些的:
????????(1)指針越界訪問;(2)指針指向的空間被釋放了(3)指針未初始化。
用戶標識符
????????用戶標識符是指用戶根據需要自己定義的用來標識某個實體的一個符號;一般用來給變量、函數、數組等命名,以建立起名稱與使用之間的關系。標識符由字母、下劃線、數字組成,并且第一個字符必須是字母或下劃線,不能是數字。
命名規則:
(1)標識符是由字母、下劃線、數字這三個方面組成的,但開頭的一百一定是字母或下劃線;
(2)標識符不能使用系統的預定義標識符;
(3)C語言中的標識符是區分大小寫的;
(4)用戶標識符可以用作變量名
字符串賦值
給字符串賦值,
方式一:可以在定義的時候直接用字符串賦值,如選項A那樣,但不能先定義再給它賦值,如:
//wrong! char a[5]; a[5] = "ABCDE";方式二:對數組中字符逐個賦值
如選項B,“char s[5] = {'A','B','C','D','E'};”,逐個賦值,也可以。
方式三:利用strcpy
char s[5]; strcpy(s, "ABCDE");方式四:?直接通過指針來賦值
如選項C"char* s; s = "ABCDE";"。
解題過程
一、返回最后一個式子的值。
二、還有其他造成野指針的成因存在。
三、BC項是符合命名規則的,不論;A項看似和主函數的定義想沖突,但實際上用到的主函數定義是“Main()”,并不是“Main”,故沒問題;剩下的是D項,sizeof是一個運算符,明顯是一個預定的標識符,如果與預定義標識符相同,則在編譯時不會出現錯誤,但會丟失預定義標識符的原始意圖或導致錯誤,因此通常不將預定義標識符用作用戶標識符。
正確答案
一、x=4,a=3
二、不是。
三、選D
四、都正確
整體代碼
#include<stdio.h> //一、 int main() {int x,y,z,a;x = (a=3, a+1);printf("x: %d\n",x); printf("a: %d\n",a); y = (a, a+3, a+2);printf("y: %d\n",y); z = a, a+5, a+6;printf("z: %d\n",z); } #include<stdio.h> //四、 int main() {char s1[5] = {"ABCDE"}; printf("s1: %s\n",s1); char s2[5] = {'A','B','C','D','E'};printf("s2: %s\n",s2);char *s3;s3 = "ABCDE";printf("s3: %s\n",s3);char s4[5]; strcpy(s4, "ABCDE");printf("s4: %s\n",s4); } //輸出結果: s1: ABCDE s2: ABCDE s3: ABCDE s4: ABCDE-------------------------------- Process exited after 0.02269 seconds with return value 10 請按任意鍵繼續. . .參考鏈接
逗號表達式與賦值語句_飛天土豆的博客-CSDN博客_賦值表達式和逗號表達式逗號表達式的結果是逗號表達式中最后一個式子的值。兩種逗號表達式與賦值語句的區別,例如:a=b,c;這個式子的最后的結果a的值是b,因為此時因為逗號低于賦值運算,故b先賦值給a,然后再計算逗號表達式。a=(b,c);這個式子的最后結果a的值是c,因為先算括號內的此時逗號表達式的值為c,然后將c的值賦值給a.#include<stdio.h> int main(void){...https://blog.csdn.net/qq_40456669/article/details/80625369詳細講解 —— 指針(C語言初階)_IT_Infector的博客-CSDN博客https://blog.csdn.net/IT_Infector/article/details/120248670以下不能定義為用戶標識符的是( ) A ) main B) _ 0 C) _int D) sizeof_百度知道https://zhidao.baidu.com/question/240643569.htmlC語言:字符串賦值的方法_cherish_xmm的專欄-CSDN博客_c語言字符串賦值main()?{?char s[30];?strcpy(s, "Good News!"); /*給數組賦字符串*/?.?.?.?}?上面程序在編譯時, 遇到char s[30]這條語句時, 編譯程序會在內存的某處留?出連續30個字節的區域, 并將第一個字節的地址賦給s。當遇到strcpy( strcpy 為?Turbo C2.0的函數)時, 首先在目標文件的https://blog.csdn.net/cherish_xmm/article/details/43267603
總結
以上是生活随笔為你收集整理的C语言逗号表达式赋值、野指针成因、用户标识符、字符串赋值的几个概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: H5 (React) 移动端监听软键盘弹
- 下一篇: 回顾2012年重大安全事件