c語言移位操作技巧「c語言移位運算符怎麼用」

開始步入正軌,有點那味了

選擇語句

if語句

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
	int input = 0;
	printf("你要好好敲代碼嗎?(1/0)n");
	scanf("%d", &input);
	if (input == 1)
		printf("一份好工作n");
	else
		printf("回家賣紅薯n");

	return 0;
}

循環語句

while語句

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
	int line = 0;
	printf("入坑,開始學習n");
	while (line < 20000)
	{
		printf("敲一行代碼:%dn",line);
		line++;
	}
	if (line >= 20000)
		printf("ding~找到一個好工作d=====( ̄▽ ̄*)bn");

	return 0;
}

函數

定義一個求和函數

int Add(int x, int y)
{
	int z = x + y;
	return z;
}
int main()
{
	int a = 100;
	int b = 200;
	int sum = 0;
	sum = Add(a, b);
	printf("sum=%dn", sum);

	return 0;
}

數組

一組相同類型元素的集合

  • 定義數組:int arr[10]={0};//定義了一個存放10個整數數字的數組
  • char ch[20};//字符型數組
  • float arr2[5];//浮點型數組

數組是通過下標訪問元素,例如:int arr[10]={1,2,3,4,5,6,7,8,9,10};通過語句printf(“%dn”,arr[4]);可以打印數字5;即arr[下標]

操作符

此次介紹了移位操作符
左移操作符<<,向左移動二進制位;
移位之後變量本身是不變的,變的是操作後產生的一個值,例如代碼

int main()
{
  int a=1;//二進制狀態下後四位是0001
  int b=a<<2;
  printf("%dn",b);//b的值為4,二進制狀態下最後四位的狀態是0100
  printf("%dn",a);//變量a還是1
  return 0;
}

單目操作符、雙目操作符、三目操作符

所謂幾目就是指的有幾個操作數
單目操作符有:!a,-a,,a++;雙目操作符有:a+b;三目操作符有:exp1?exp2:exp3,這個表達式的意思可以解釋為exp1若成立,則整個表達式的值為exp2,若exp1不成立則整個表達式的值為exp3

關鍵字

typedef

為類型重命名,即給一個類型起名字
typedef unsigned int uint_32;//將unsigned int重命名為unint_32,所以unint_32也是一個類型名

static

1.修飾局部變量–靜態局部變量:使局部變量的生命周期變長
2.修飾全局變量–靜全局部變量:使全局變量只能在自己所在的源文件內使用
3.修飾函數–靜態函數:把函數本來的外部鏈接屬性變成內部鏈接屬性
總結:讓作用範圍小的變大,大的變小

指針

指針變量:一種用來存放地址的指針變量,類型為int*(這裡的*只是個形式,說明變量是指針變量)
解引用:根據指針變量存放的地址找到該地址的變量;*變量名,(這裡的*是操作符)

int main()
{
  int a=10;//定義一個變量,申請4個字節內存
  int* p=&a;//取地址,把地址放到p的申請的內存里,這裡的*說明p就是指針變量
  *p=20;//* --解引用操作符,根據p中的地址找到a,並對a進行操作
  printf("a=%dn",a);
  return 0;//打印結果為20
}

執行流程可以理解為:房東找了一個房間出租,房間起了個名叫做a雅居,住進來個人叫10君,房東看了看a雅居的門牌號(這個過程就是&a),假設地址為0x0012ff40記在本子p上,本子的規格為int*;某一天房東看10君不順眼,想讓20君住進去,房東根據本子p上的地址(即0x0012ff40)找到了10君(這個過程就是*p),把他趕了出去,讓20君住進去;現在去a雅居找到的人就是20君

流程圖:

我的C語言學習日記03-c語言的靈魂:指針和結構體

​​int a=10;解釋:申請一塊內存命名為a,這塊內存放的值為10,這塊內存的地址為0x0012ff40
int*p=&a;解釋:申請一塊內存命名p,把a的地址放到這塊內存中;這塊內存p也有地址,但此時不考慮(&a就是獲取a的地址)
*p=20;解釋:*p(即解引用)根據p內存儲的地址找到a,此時*p就相當於a,對*p的操作相當於對a進行操作;所以把20賦給*p就是把20賦給a

指針變量的大小

指針存儲的是地址,32位的機器地址是32位,也就是4個字節,所以32位的機器指針大小為4個字節;同理在64位的機器上地址是64位,佔8個字節,所以所以64位的機器指針大小為8個字節
指針變量的大小隻與平台位數有關,和變量類型無關

int main() //32位平台
{
  printf("%dn",sizeof(char*));//佔4個字節
  printf("%dn",sizeof(short*));//佔4個字節
  printf("%dn",sizeof(int*));//佔4個字節
  printf("%dn",sizeof(double*));//佔4個字節
  return 0;
}

結構體

用來描述複雜對象,本質是一種自定義創造出來的類型
結構體類型內有成員,要用.操作符訪問

struct Book //結構體的類型
{
	char name[20];//書名
	short price;//價格
};//這裡的分號不可缺少!!!!!!

int main()
{
	//利用結構體類型--創建一個該類型的結構體變量
	struct Book b1 = { "C語言程序設計", 55 };
	printf("書名:%sn", b1.name);//此處的.為屬性操作符,用於訪問結構體成員
	printf("價格:%d元n", b1.price);
	b1.price = 15;//訪問到價格成員,更改數值
	printf("修改後的價格:%d元n", b1.price);
  return 0;
}

利用指針pb打印出書名和價格(使用.操作符打印)

struct Book
{
	char name[20];
	short price;
};

int main()
{
	struct Book b1 = { "C語言程序設計", 55 };
	struct Book* pb = &b1;//定義指針變量pb   *表明是指針變量
	//利用指針pb打印出書名和價格                 
	printf("%sn", (*pb).name);//解引用                
	printf("%dn", (*pb).price);// 
  return 0;
}

還可以使用->操作符打印,更加便捷

struct Book
{
	char name[20];
	short price;
};

int main()
{
	struct Book b1 = { "C語言程序設計", 55 };
	struct Book* pb = &b1;//定義結構體指針變量pb   *表明是指針變量	                
	printf("%sn", pb->name);               
	printf("%dn", pb->price); 
  return 0;
}

.操作符和->操作符的比較:
->操作符的使用結構是:結構體指針->成員 只要定義了結構體指針變量就可以使用,直接從結構體指針變量指向成員;但.操作符的使用結構是:結構體變量.成員 需要結合解引用,繁瑣


對於結構體變量的更改

前文使用b1.prince=15;語句可以更改價格,因為prince是變量,所以可以直接更改數值;但是結構體中的書名name是數組名,本質上是地址,不可以直接更改,所以使用b1.name=”C++程序設計”;語句會報錯不可以更改。

想要更改如下所示:

struct Book//結構體的類型
{
	char name[20];//書名
	short price;//價格
};
int main()
{
  struct Book b1 = { "C語言程序設計", 55 };
  strcpy(b1.name,"C++程序設計");//全稱strcpy-string copy,是一個字符串拷貝函數
  printf("%sn",bi.name);
  return 0;
}

strcpy()函數全稱是:strcpy-string copy,是一個字符串拷貝函數
此函數有兩個參數,strcpy(目的地,”需拷貝的字符”)

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/269798.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-16 13:19
下一篇 2024-12-16 13:19

相關推薦

發表回復

登錄後才能評論