精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言-一維指針定義與使用

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 10:02 ? 次閱讀

1. 前言

指針在很多書本上都是當做重點來介紹,作為C語言的靈魂,項目里指針無處不在。

比如: 指針作為函數形參的時候,可以間接修改源地址里的數據,也就相當于解決了函數return一次只能返回一個值的問題。

指針在嵌入式單片機里使用最直觀,可以直接通過指針訪問寄存器地址,對寄存器進行配置;計算機的CPU、外設硬件都是依靠地址操作的。

2. 指針變量如何定義?

#include 
#include 
int main()
{
	char *p1;  //定義一個char類型的指針變量
	int *p2;   //定義一個int類型的指針變量
	//int類型的指針變量: 存放地址數據。
	
	int data=123; //定義一個int類型的變量
	//int類型的變量: 存儲整數數據。
	return 0;
}

3. 指針如何使用?

#include 
#include 
int main()
{
	// &data  取地址    a&b 按位與   a&&b  并且
	// int *p 定義一個int類型的指針
	// *p  取出指針指向空間中的數據--取數據
	// a*b a和b乘法
	
	int *p; //指針變量本身就是存放地址的
	int data=123; 
	//p=data; //錯誤:data本身只是一個變量標識符,不是地址
    p=&data;  //將data的地址賦值給指針p
	
	printf("*p=%d\n",*p); //取出指針p指向空間中的數據
	*p=666; //給指針指向的空間賦值
	printf("data=%d\n",data);
	return 0;
}

4. 什么是野指針?

野指針就是本身沒有合法地址空間—非法指針。

野指針會導致的常見錯誤:段錯誤。

下面代碼就會導致段錯誤:

#include 
#include 
int main()
{
	int *p;//指針只能存放地址
	*p=123;
	printf("*p=%d\n",*p);
	return 0;
}

5. 指針本身占的空間是多少?

所有指針類型都占4個字節空間。和類型沒有關系。

#include 
#include 
int main()
{
	int *int_p;//指針只能存放地址
	int int_a;
	char *char_p;//指針只能存放地址
	char char_a;
	float *float_p;//指針只能存放地址
	float float_a;
	double *double_p;//指針只能存放地址
	double double_a;
	printf("int_a=%d\n",sizeof(int_a));//4
	printf("int_p=%d\n",sizeof(int_p));//4
	
	printf("char_a=%d\n",sizeof(char_a));
	printf("char_p=%d\n",sizeof(char_p));
	
	printf("float_a=%d\n",sizeof(float_a));
	printf("float_p=%d\n",sizeof(float_p));
	
	printf("double_a=%d\n",sizeof(double_a));
	printf("double_p=%d\n",sizeof(double_p));
	return 0;
}

6. 指針訪問數組成員

6.1 訪問一維數組成員的方式有哪些?

#include 
#include 
int main()
{
	int a[]={1,2,3,4,5,6,7,8,9,0};
	int *p;
	p=a;
	printf("下標4的值:%d\n",a[4]); //5
	printf("下標4的值:%d\n",*(a+4)); //5
	printf("下標4的值:%d\n",*(p+4)); //5
	return 0;
}

6.2 指針訪問一維數據常用的操作方式:字符串

#include 
#include 
int main()
{
	char str[]="1234567890";
	char *p=str;
	int len=0;
	printf("p=%s,str=%s\n",p,str);
	//計算字符串的長度
	while(*p++!='\0')
	{
		len++;
	}
	printf("len=%d\n",len);
	return 0;
}

6.3 指針自增和自減?++和—運算符

#include 
#include 
int main()
{
	int a[]={1,2,3,4,5,6,7,8,9,0};
	int *p=a;
	printf("%d\n",*p);   //1
	printf("%d\n",*p++); //1
	printf("%d\n",*p);   //2
	printf("%d\n",*(p+3));//5
	printf("%d\n",*p);//2
	printf("%d\n",*(++p));//3
	printf("%d\n",*p);//3
	printf("%d\n",*p--);//3
	printf("%d\n",*p);//2
	return 0;
}

6.4 指針自增自減偏移字節是多少?

與指針本身的類型有關系。

#include 
#include 
int main()
{
	/*
	int a[]={1,2,3,4,5,6,7,8,9,0};
	int *p=a;
	printf("偏移之前的地址:p=%#x\n",p);
	*(p++);
	printf("%d\n",*p);   //2
	printf("偏移之后的地址:p=%#x\n",p);
	*/
	char a[]={1,2,3,4,5,6,7,8,9,0};
	char *p=a;
	printf("偏移之前的地址:p=%#x\n",p);
	*(p++);
	printf("%d\n",*p);   //2
	printf("偏移之后的地址:p=%#x\n",p);
	return 0;
}

6.5 數組本身可以當做指針使用嗎?

不可以

指針特點: 自增、自減、可以改變指向。

#include 
#include 
int main()
{
	int a[]={1,2,3,4,5}; //*(a+3)
	int b[]={11,12,13,14,15};
	//下面3行代碼是錯誤的
	a--;
	a++;
	a=b;
	return 0;
}

6.6 指針可以當做數組使用嗎?

可以

數組特點: 可以通過下標訪問數組成員。

#include 
#include 
int main()
{
	int a[]={1,2,3,4,5};
	int *p=a;
	printf("%d\n",a[0]);
	printf("%d\n",p[0]); //*p
	return 0;
}

7. 數組指針

數組指針可以指向一個一維數組,行指針也叫一維數組指針。

定義語法:char (*p)[5]; 該指針指向一個二維數組里的一個一維數組地址,一維數組的成員是5個字節。

二維數組的定義方法:char a[10][5];

#include 
#include 
int main()
{
	int (*p)[5]; //定義一個一維數組指針---行指針
	int a[2][5]=
	{
		{1,2,3,4,5},
		{6,7,8,9,10}
	};
	p=a; //將a地址給p指針
	printf("%d\n",p[0][2]);
	
	p++; //加一個一維數組的大小
	printf("%d\n",p[0][2]);
	return 0;
}

8. 指針數組

指針數組: 表示該數組成員可以存放指針。

指針數組定義語法:int *p[5];表示定義一個int數組,該數組的類型可以存放5個int類型的指針變量(地址)。

#include 
#include 
int main()
{
	int a,b,c;
	int *p[3]; //一次定義3個int類型的指針變量
	//存放地址
	p[0]=&a;
	p[1]=&b;
	p[2]=&c;
	//對空間賦值
	*p[0]=123;
	*p[1]=456;
	*p[2]=789;
	//取出數據
	printf("%d\n",*p[0]);
	printf("%d\n",*p[1]);
	printf("%d\n",*p[2]);
	return 0;
}

#include 
#include 
int main()
{
	char a[][100]={"小明","小白","小李"};
	char *p[]={"小明","小白","小李"};
	
	printf("%s\n",a[0]);
	printf("%s\n",p[0]);
	return 0;
}

9. 指針類型常見的初始化值:NULL

#include 
#include 
int main()
{
	char *p=NULL; // (void*)0 == NULL
	printf("%#x\n",p);
	if(p!=NULL)
	{
		//判斷指針是否可以使用
	}
	return 0;
}
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5068

    文章

    19015

    瀏覽量

    303239
  • C語言
    +關注

    關注

    180

    文章

    7598

    瀏覽量

    136182
  • 指針
    +關注

    關注

    1

    文章

    480

    瀏覽量

    70509
收藏 人收藏

    評論

    相關推薦

    C語言中指針定義

    節中,我們利用了個小知識來介紹了指針,在上面這個例子中,小明和小麗手中的這個杯子就好比我們C
    發表于 08-15 16:24 ?1798次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中指針</b>的<b class='flag-5'>定義</b>

    大話指針變量的定義

    b),返回值為int,要指向其他類型的函數,可以照此方法類推,同樣我想把二數組名存到指針變量,我們知道二數組名是個數組指針,所以我們
    發表于 09-24 01:01

    文徹底搞懂C語言指針

    相似,二數組名是個指向整個二數組首地址的指針,但是它的類型不再是int類型指針,而是int類型數組
    發表于 07-22 14:48

    C51語言指針、結構、聯合和枚舉

     指針C51語言的精華也是難點。本章主要介紹指針的概念、定義指針的方法,介紹指向
    發表于 06-12 23:47 ?112次下載

    C語言入門教程-指針

    指針C語言中,指針被廣泛使用。所以要想完整地掌握C語言,您需要對
    發表于 07-29 11:30 ?656次閱讀

    C語言入門教程-指向結構體的指針

    指向結構體的指針C語言中幾乎可以創建指向任何類型的指針,包括用戶自定義的類型。創建結構體指針
    發表于 07-29 12:04 ?3147次閱讀

    C語言指針電子教程

    本資料是份不錯的關于C語言指針的電子教程,希望對大家有所幫助... 指針簡介 指針
    發表于 07-30 16:00 ?77次下載

    C語言指針函數和函數指針詳細介紹

    C語言指針函數和函數指針詳細介紹。。。。。。。
    發表于 03-04 15:27 ?5次下載

    c語言函數指針定義,指針函數和函數指針的區別

     往往,我們提到指針函數和函數指針的時候,就有很多人弄不懂。下面就由小編詳細為大家介紹C語言中函數指針
    發表于 11-16 15:18 ?3613次閱讀

    C語言的精髓——指針詳解

    C語言的精髓——指針詳解
    發表于 11-30 14:43 ?17次下載

    C語言教程之指針定義及特點(上篇)

    int (*p)[n];p為指向含n個元素的數組的指針變量 int f();f為帶回整型函數值的函數 int *p();p為帶回指針
    發表于 05-22 07:28 ?2501次閱讀

    10分鐘掌握C語言指針

    說到指針,估計還是有很多小伙伴都還是云里霧里的,有點知其然,而不知其所以然。但是,不得不說,學了指針C語言才能算是入門了。指針
    的頭像 發表于 11-04 16:37 ?1717次閱讀

    C語言中的野指針是怎么來的?

    、什么是野指針指針C語言的靈魂,同時也是很容易讓人犯錯的重難點,用錯了指針將是
    的頭像 發表于 06-01 16:43 ?2522次閱讀

    c語言指針用法簡單舉例 C51的指針概述

    指針C語言個特殊的變量,它存儲的數值被解釋成為內存的個地址。 指針
    的頭像 發表于 04-22 18:04 ?4721次閱讀

    C語言進階】C語言指針的高階用法

    C語言進階】C語言指針的高階用法
    的頭像 發表于 08-31 13:24 ?2281次閱讀