成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

指針(C語(yǔ)言)-創(chuàng)新互聯(lián)

文章目錄
  • 1 指針是什么
  • 2 指針和指針類型
    • 2.1 指針+-整數(shù)
    • 2.2 指針的解引用
  • 3 野指針
    • 3.1 指針未初始化
    • 3.2 指針越界訪問
    • 3.3 指針指向的空間釋放
    • 3.4 避免野指針
  • 4 指針運(yùn)算
    • 4.1 指針±整型
  • 4.2 指針減指針
  • 5 指針和數(shù)組
  • 6 二級(jí)指針
  • 7 指針數(shù)組

創(chuàng)新互聯(lián)于2013年開始,先為林口等服務(wù)建站,林口等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為林口企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

在這里插入圖片描述

1 指針是什么
  • 指針是內(nèi)存中一個(gè)最小單元(1字節(jié)byte)編號(hào),也就是地址
  • 平時(shí)口語(yǔ)中說的指針,通常指的是指針變量,是用來存放內(nèi)存地址的變量
  • 我們可以通過&(取地址操作符)取出變量的內(nèi)存 (起始地址),把地址可以存放到一個(gè)變量中,這個(gè)變量就是指針變量
int a = 10;
int * pa = &a;
*pa = 20;
printf("%d\n", a);

20

在這里插入圖片描述

  • 存放在指針中的值都被當(dāng)成地址處理
  • 對(duì)于32位的機(jī)器,假設(shè)有32根地址線,那么假設(shè)每根地址線在尋址的時(shí)候產(chǎn)生高電平(高電壓)和低電平(低電壓)就是(1或者0),有2的32次方個(gè)地址. 在32位的機(jī)器上,地址是32個(gè)0或者1組成二進(jìn)制序列,那地址就得用4個(gè)字節(jié)的空間來存儲(chǔ),所以一個(gè)指針變量的大小就應(yīng)該是4個(gè)字節(jié).那如果在64位機(jī)器上,如果有64個(gè)地址線,那一個(gè)指針變量的大小是8個(gè)字節(jié),才能存放一個(gè)地址。
    在這里插入圖片描述
2 指針和指針類型

指針的定義方式是:type + *

int* pa;
	char* pc;
	float* pf;

	printf("%d\n", sizeof(pa));
	printf("%d\n", sizeof(pc));
	printf("%d\n", sizeof(pf));

4
4
4

在x86下,指針變量的大小都是4.

2.1 指針±整數(shù)
int main()
{int a = 0x11223344;
	//int*pa = &a;
	//*pa = 0;
	char* pc = &a;
	*pc = 0;

	return 0;
}

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
因?yàn)橛?code>char*,解引用的時(shí)候只能訪問1個(gè)字節(jié),只能修改44.

2.2 指針的解引用
int main()
{int a = 0x11223344;
	int*  pa = &a;
	char* pc = &a;

	printf("pa=%p\n", pa);
	printf("pc=%p\n", pc);

	printf("pa+1=%p\n", pa -1);
	printf("pc+1=%p\n", pc -1);

	return 0;
}

pa=00AFF7EC
pc=00AFF7EC
pa+1=00AFF7E8 //減4
pc+1=00AFF7EB //減1

在這里插入圖片描述

  • 數(shù)組名作指針
int arr[10] = {0 };
	int* p = arr;//數(shù)組名就是數(shù)組首元素的地址arr->&arr[0];

	for (int i = 0; i< 10; i++)
	{*(p + i) = i + 1;
	}

在這里插入圖片描述

int arr[10] = {0 };
	char* p = arr;
	
	int i = 0;
	for (i = 0; i< 10; i++)
	{*p = i + 1;
		p++;
	}

在這里插入圖片描述
可以看見用char類型解引用整型數(shù)組是不對(duì)的.01 02 03 04對(duì)應(yīng)arr[0] = 67305985.

3 野指針

野指針就是指針指向的位置是不可知的(隨機(jī)的、不正確的、沒有明確限制的)

3.1 指針未初始化
int* p;
	*p = 20;

在這里插入圖片描述

3.2 指針越界訪問
int main()
{int arr[10] = {0};
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* p = arr;
	for (i = 0; i<= sz; i++)
	{*p = i;
		p++;
	}

	return 0;
}

Run-Time Check Failure #2 - Stack around the variable 'arr' was corrupted.

3.3 指針指向的空間釋放
int* test()
{int num = 100;
	printf("%p\n", &num);
	return #
}

int main()
{int* p = test();
	*p = 200;
	printf("%d\n", *p);
	printf("%p\n", p);

	return 0;
}


010FF754
200
010FF754
3.4 避免野指針
int main()
{int a = 10;
	int* pa = &a;
	int* p = NULL;

	return 0;
}
  • 判斷為NULL
int a = 10;
	//int* p = NULL;
	//*p = 20;

	int* p = &a;

	if (p != NULL)
	{printf("%d\n", *p);
	}
	
10
4 指針運(yùn)算 4.1 指針±整型
double arr[5] = {0};
	double* p = arr;
	int i = 0;
	for (i = 0; i< 5; i++)
	{printf("%lf ", *(p + i));
	}
0.000000 0.000000 0.000000 0.000000 0.000000
  • 注意浮點(diǎn)%f
#define N_VALUES 5
float values[N_VALUES];
float* vp;

int main()
{for (vp = &values[N_VALUES - 1]; vp >= &values[0]; vp--)
	{*vp = 1;
	}
	for (int i = 0; i< N_VALUES; i++)
	{printf("%f\n", values[i]);
	}
	return 0;
}

1.000000
1.000000
1.000000
1.000000
1.000000

實(shí)際在絕大部分的編譯器上是可以順利完成任務(wù)的,然而我們還是應(yīng)該避免這樣寫,因?yàn)闃?biāo)準(zhǔn)并不保證它可行。

4.2 指針減指針

兩個(gè)指針相減的前提是:指針指向的同一塊連續(xù)的空間

int arr[10] = {0};
	printf("%d\n", &arr[9] - &arr[0]);
	printf("%d\n", &arr[0] - &arr[9]);

	int a = 10;
	char c = 'w';
	printf("%d\n", &a - &c);//err
9
-9
2
5 指針和數(shù)組
  • 指針為NULL判斷結(jié)束
int my_strlen1(char* str)
{int count = 0;
	while (*str)
	{count++;
		str++;
	}
	return count;
}


int my_strlen2(char* str)
{char* start = str;
	while (*str)
		str++;
	return str - start;
}
//
int main()
{char arr[] = "abc";
	int len1 = my_strlen1(arr);
	int len2 = my_strlen2(arr);
	printf("%d\n", len1);
	printf("%d\n", len2);

	return 0;
}

3
3
  • 指針訪問數(shù)組元素
    在這里插入圖片描述
int arr[10] = {1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);

	for (i = 0; i< sz; i++)
	{printf("%d\n", *(p + i));
	}

1
2
3
4
5
6
7
8
9
10
6 二級(jí)指針
  • p就是指針變量,一級(jí)指針變量
  • pp二級(jí)指針
int main()
{int a = 10;//
	int* p = &a;//
	int** pp = &p;//

	//*(*pp) = 200;
	**pp = 200;
	//*p = 20;
	printf("%d\n", a);

	return 0;
}

200

在這里插入圖片描述

7 指針數(shù)組

指針數(shù)組是指針還是數(shù)組?答案:是數(shù)組。是存放指針的數(shù)組。

int arr[10];
	char arr2[5];
	int* arr3[5];//存放整型指針的數(shù)組
	char* arr4[6];//存放字符指針的數(shù)組
  • 1
int a = 10;
	int b = 20;
	int c = 30;
	int d = 40;
	int e = 50;

	int* arr3[5] = {&a, &b, &c, &d, &e};//存放整型指針的數(shù)組
	int i = 0;
	for (i = 0; i< 5; i++)
	{printf("%d ", *(arr3[i]));
	}
10 20 30 40 50
  • 用一維數(shù)組模擬一個(gè)二維數(shù)組
    在這里插入圖片描述
int arr1[] = {1,2,3,4,5 };
	int arr2[] = {2,3,4,5,6 };
	int arr3[] = {3,4,5,6,7 };
	int arr4[] = {4,5,6,7,8 };

	int* arr[4] = {arr1, arr2, arr3, arr4};
	int i = 0;
	for (i = 0; i< 4; i++)
	{int j = 0;
		for (j = 0; j< 5; j++)
		{	printf("%d ", *(*(arr+i)+j));
		}
		printf("\n");
	}

1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8

上面的打印可以寫為

int i = 0;
	for (i = 0; i< 4; i++)
	{int j = 0;
		for (j = 0; j< 5; j++)
		{	printf("%d ", arr[i][j]);
		}
		printf("\n");
	}```

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

名稱欄目:指針(C語(yǔ)言)-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://jinyejixie.com/article12/hghdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站制作、企業(yè)建站、網(wǎng)站營(yíng)銷、虛擬主機(jī)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
瑞昌市| 潞城市| 靖边县| 丰台区| 荥经县| 同德县| 无锡市| 郧西县| 从化市| 冕宁县| 万源市| 武山县| 游戏| 延安市| 棋牌| 萨嘎县| 龙门县| 阿城市| 龙口市| 桦甸市| 高陵县| 普兰店市| 台湾省| 封丘县| 农安县| 延庆县| 常德市| 寿阳县| 绥化市| 楚雄市| 灵石县| 苏州市| 新兴县| 玉屏| 房山区| 东山县| 化州市| 克拉玛依市| 铜梁县| 隆安县| 远安县|