UNIX/LINUX,Linux C基礎筆記(4)終結篇

 2023-10-15 阅读 24 评论 0

摘要:Linux C基礎筆記(4)終結篇 補充申明:Linux C基礎筆記共分為四部分,第一部分是Linux下基本命令,以及vi編輯器的使用還有C中的數據類型,第二部分為運算符、常量變量和輸入輸出。第三部分是控制語句、數組、字符串函數。第四部分為指針

Linux C基礎筆記(4)終結篇

補充申明:Linux C基礎筆記共分為四部分,第一部分是Linux下基本命令,以及vi編輯器的使用還有C中的數據類型,第二部分為運算符、常量變量和輸入輸出。第三部分是控制語句、數組、字符串函數。第四部分為指針、函數以及分配內存管理。在寫完這四部分之后我會繼續上傳數據結構、IO、以及網絡編程的學習筆記,大家如果有需要學習Linux下編程的可以關注一下,我會將我所有的學習筆記發布在此供大家一起學習。(在筆記里面會有一些其他博主的總結,如果涉及到實屬抱歉,您可以通過郵箱聯系我,我會及時修改。1509965601@qq.com)。

  • 指針

UNIX/LINUX?- 【1】定義

	在計算機內部存儲器(簡稱內存)中,每一個字節單元,都有一個編號,稱為地址。
在C語言中,內存單元的地址稱為指針,專門用來存放地址的變量,稱為指針變量(pointer variable)。
在不影響理解的情況中,有時對地址、指針和指針變量不區分,通稱指針。一般形式 :<存儲類型><數據類型> *<指針變量> = <地址量>  int a, *p = &a;  ==  int *p; p=&a;

【2】&和*

&:取一個變量的地址,常量不能取地址
*:在定義指針變量的時候,起到標識作用,標識定義的是一個指針變量其他地方都表示取地址的內容

java基礎筆記、【3】指針變量的運算

指針變量的運算依據指針變量的類型來決定

【4】指針的運算

指針運算是以指針變量所存放的地址量作為運算而進行的運算
指針運算的實質就是地址的計算
指針運算的種類是有限的,他只能進行賦值運算、算術運算和關系運算。int *p;
p + n  向地址大的方向移動n個數據
p + 1  向地址大的方向移動4個地址(一個數據類型的大小)
p - 1  向地址小的方向移動4個地址	
p++    自增  向地址大的方向移動1個數據
p--    自減
p - q  兩個地址之間相隔數據元素的個數注意:不同數據類型的兩個指針實行加減整數運算是無意義的。

【5】指針與數組

數組指針: 實際上是一個指針,該指針指向一個數組		int (*arr)[4];	int a[3][4]; int (*p)[4];	  arr指向含有4個int型元素的一維數組變量整體,其類型為可存儲4個int型數據的數據類型。 指針數組:(將多個字符串賦值給數組時,選用) 實際是一個數組,數組的每個元素存放的是一個指針類型的元素 	int* p[8]; int a[8][3]; p[1] = a[1];	p是一個指針含有8個int*的數組,數組元素類型是int指針類型。指針與一維數組 int a[4], *p;p = a; p = &a[0];a[i] <=> *(a + i) <=> *(p + i) <=> p[i]例子: main(){int a[5] = {1,2,3,4,5};int *p = (int *)(&a + 1);printf("%d %d0",*(a+1),*(p-1))}輸出  2  5指針與二維數組int a[3][4]; int (*p)[4];<=> int *p = &a[0][0]&a 	地址升級,指向整個數組		&a+1 移動整個數組大小的字節a 	行指針,指向一行*a 	列指針,地址的降級,指向一個數據*a = a[0];a[i][j] <=> *(*(a + i) + j) <=> *((p + i) + j)<=>p[i][j];p = a[0] = &a[0][0];

【6】字符指針與字符串

初始化字符指針是把內存中字符串的首地址賦予指針,并不是把該字符串復制到指針中	
當一個字符指針指向一個字符串常量時,不能修改指針指向的對象值  可修改
char str[] = "hello";
char *p = str;不可修改
char *p = "hellochar ch1[] = "hello";
char ch2[] = "hello";
char *p;
p = ch1 / p = ch2; 其中ch1和ch2的地址不同char *p = "hello";
char *q = "hello"; 其中p和q的地址一樣
  • 函數

【1】定義

函數是一個完成特定功能的代碼模塊,其程序代碼獨立,通常要求有返回值,也可以是空值。
一般形式如下:
<返回值類型>  <函數名稱>( <形式參數說明> )
{語句序列;return[(<表達式>)];
} 

【2】函數的參數傳遞方式:

值傳參
地址傳參

【3】函數的數組傳參方式

int a[4];
void order(int a[],int size);
void order(int *a);從函數返回數組C 語言不允許返回一個完整的數組作為函數的參數。但是,您可以通過指定不帶索引的數組名來返回一個指向數組的指針。int * getRandom( ){static int  r[10] = {1,2,6,6,5,4,4};return r;}int main (){	/* 一個指向整數的指針 */int *p;int i;p = getRandom();for ( i = 0; i < 10; i++ ){printf( "*(p + %d) : %d\n", i, *(p + i));}return 0;}這個方法實際是我們下面講到的指針函數。

【4】遞歸函數

C 語言支持遞歸,即一個函數可以調用其自身。但在使用遞歸時,程序員需要注意定義一個從函數退出的條件,否則會進入死循環。
遞歸函數在解決許多數學問題上起了至關重要的作用,比如計算一個數的階乘、生成斐波那契數列,等等。#include <stdio.h>
double fun( int i)
{if(i <= 1)
{return 1;}return i * fun(i - 1);
}
int  main()
{int i = 10;printf("%d 的階乘為 %f\n", i, fun(i));return 0;
}

【5】指針函數

如果一個函數的返回值是指針,則稱函數為指針函數。char *mystring(void){static char str[N];char *str = "hello";  //此str 不可修改return str;}

【6】函數指針

函數指針是指向函數的指針變量。通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數指針是指向函數。函數指針可以像一般函數一樣,用于調用函數、傳遞參數。函數指針變量的聲明: typedef int (*fun_ptr)(int,int);int max(int x, int y)
{return x > y ? x : y;
}int main(void)
{/* p 是函數指針 */int (* p)(int, int) = & max; // &可以省略int a, b, c, d;printf("請輸入三個數字:");scanf("%d %d %d", & a, & b, & c);/* 與直接調用函數等價,d = max(max(a, b), c) */d = p(p(a, b), c); printf("最大的數字是: %d\n", d);return 0;
}

【7】回調函數

函數指針變量可以作為某個函數的參數來使用的,回調函數就是一個通過函數指針調用的函數。
// 回調函數
void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{for (size_t i=0; i<arraySize; i++)array[i] = getNextValue();
}// 獲取隨機值
int getNextRandomValue(void)
{return rand();
}int main(void)
{int myarray[10];populate_array(myarray, 10, getNextRandomValue);for(int i = 0; i < 10; i++) {printf("%d ", myarray[i]);}printf("\n");return 0;
}#include<stdio.h>
int fun(int a,int b)
{int c;c = a+b;return c;
}int fun1(int a,int c,int d,int (*fun)(int a,int b))
{int sum;sum = a + fun(c,d);return sum;
}int main()
{int sum;sum = fun1(10,2,1,fun);printf("%d\n",sum);}

因為時間關系,今天的筆記就碼到這里,給大家說好的還有動態分配空間我會放到后邊的結構體里。(小聲嗶嗶:反正也沒人看。(?_?) )

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/137282.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息