C / C ++言語の断片的な知識ポイントの要約(1)

C / C ++言語の断片的な知識ポイントの要約(1)

  過去3年間の大学での勉強で、たくさんの知識や問題が散らばっていましたが、久しぶりに忘れてしまうものもあり、この問題を克服するためにブログを使って記録を残すことを考えました。あいまいさのために。私が戻って再び学ぶとき。

まず、コードを見てください。
	# include <stdio.h>
		
		int main(void){
    
    
		
			char side_a[] = "Side A";
			char dont[] = {
    
     'w','o','w','!'};	
			char side_b[] = "Side B";
			
			puts(dont);
			return 0;
			
		}

ここに画像の説明を挿入
  操作の結果に少し驚かれますか?puts関数の出力はdontの「wow!」文字列であってはならないと思いませんか?なぜサイドAがまだあるのですか、そしてなぜサイドBの後ろにあることができないのですか?

  心配しないでください、ブロガーがあなたのために答えます。

  知識ポイント1:puts()関数分析:

  現時点でこのブログ投稿を通過したかわいい女の子は、puts()関数の正しい使用法にすでに精通している必要があると思います。理解していなくても大丈夫です。ブロガーは非常に注意深く、学習リンク。

  1. puts()関数Baidu百科事典
  2. C言語のputs()関数の使用法の詳細

  トピックに戻りましょう。そうです、puts()関数の最も重要なポイントは、puts関数がターミネーター "\ 0"に遭遇するまで終了しないことです。そうでない場合、コンピューターは、空のスペース文字は終了するため、終了記号がない場合、puts関数は文字化けした文字を出力する可能性があります。

  知識ポイント2:C / C ++の各変数ストレージ領域は異なります。

  メモリ内のC / C ++プログラムの各変数のストレージ領域:

  1.メモリスタック領域:ローカル変数名を格納します
  2.メモリヒープ領域:新しいオブジェクトまたはmallocオブジェクトを格納します;
   3.定数領域:ローカル変数またはグローバル変数の値を格納します;
   4.静的領域:グローバル変数または静的変数を格納します;
   5 。コード領域:バイナリコード。

  また、C / C ++にはガベージコレクションメカニズムがないため、メモリリークを防ぐためにヒープデータを時間内に破棄してリサイクルする必要があります。これはおなじみのfree()関数とdelete()関数であり、スタックメモリは動的にリリースされます。
  さて、素敵です、上記の簡単な紹介の後、あなたはコードの結果の理由を推測したに違いありません、ハハハ、私は一緒に答えを明らかにさせてください。

ここに画像の説明を挿入

  まず、宣言されているものはすべてローカル変数であるため、メモリスタック内のスペースがすべて割り当てられます。また、dont配列には文字列ターミネータ「\ 0」がないため、puts()関数を使用した後、メモリスタックでターミネータ「\ 0」を含む文字列を逆方向に検索し、それらを一緒に出力します。
  また、side_a変数はdont変数の前にスタックにプッシュされるため、side_aはdontの後に配置され、side_aを逆方向に見ると、ポインターpにはターミネーター「\ 0」があります。したがって、puts()関数はside_aに対して実行されます。それが本当の終わりです。
  さて、ブログの投稿は断続的にまとめられています。今日も大晦日です。皆さんが幸せな旧正月を迎え、「牛」が世界を変えてくれることを願っています。

おすすめ

転載: blog.csdn.net/qq_43515862/article/details/113756677