欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言超詳細講解指針與結構體

 更新時間:2022年05月05日 16:42:20   作者:野豬佩奇`  
指針提供了對地址操作的一種方法,因此,使用指針可使得C語言能夠更高效地實現對計算機底層硬件的操作。另外,通過指針可以更便捷地操作數組。C數組允許定義可存儲相同類型數據項的變量,結構是C編程中另一種用戶自定義的可用的數據類型,它允許您存儲不同類型的數據項

本節(jié)目標

理解內存與地址的相關概念,初步掌握指針的定義與使用,理解結構體的概念,掌握其基本的使用及訪問方法。

初識指針

1、內存與地址

內存是電腦上特別重要的存儲器,計算機中程序的運行都是在內存中進行的。

*所以為了有效的使用內存,就把內存劃分成一個個小的內存單元,每個內存單元的大小是1個字節(jié)。 *同時為了能夠有效的訪問到內存的每個單元,就給內存單元進行了編號,這些編號被稱為該內存單元的地址。

2、變量的地址

變量是創(chuàng)建內存中的(在內存中分配空間的),每個內存單元都有地址,所以變量也是有地址的。

取出變量地址如下:

#include <stdio.h>
int main()
{
 int num = 10;
 &num;//取出num的地址
    //注:這里num的4個字節(jié),每個字節(jié)都有地址,取出的是第一個字節(jié)的地址(較小的地址)
 printf("%p\n", &num);//打印地址,%p是以地址的形式打印
 return 0;
}

3、指針變量

*指針變量:用來存放指針的變量(指針就是地址)。

#include<stdio.h>
{
	int num = 10;
	int *p;//p為一個整形指針變量,int*是p的類型,其中*代表p是一個指針,int表示p指向的變量的類型是int的。
	p = &num;
	return 0;
}

4、指針的使用

#include <stdio.h>
int main()
{
	int num = 10;
	int* p = &num;
	*p = 20;
	printf("%d\n", num);
	return 0;
}

int* p = &num :定義一個指針變量 p,并將 num 的地址賦給 p,這時 p 里面存放的就是 num 的地址,也就是說 p 指向了 num;

*p = 20 :* 是解引用操作符,*p 就是對 p 進行解引用,就是通過 p 里面存放的 num 的地址找到 num,并將 num 空間中存放的數據10修改為20;

5、指針變量的大小

#include <stdio.h>
int main()
{
	//%zu:用來打印無符號整型,與 %u 相似
	printf("%zu\n", sizeof(char*));   
	printf("%zu\n", sizeof(short*));
	printf("%zu\n", sizeof(int*));
	printf("%zu\n", sizeof(double*));
	return 0;
}

*所以:指針大小在32位平臺是4個字節(jié),64位平臺是8個字節(jié)。(本質是因為不同平臺下的地址線數量不同)

初識結構體

1、什么是結構體

結構體是C語言中一種重要的數據類型,該數據類型由一組稱為成員(或稱為域,或稱為元素)的不同數據組成,其中每個成員可以具有不同的類型。結構體通常用來表示類型不同但是又相關的若干數據。

結構體類型不是由系統定義好的,而是需要程序設計者自己定義的。C語言提供了關鍵字struct來標識所定義的結構體類型。

關鍵字struct和結構體名組合成一種類型標識符,其地位如同通常的int、char等類型標識符,其用途就像 int 類型標識符標識整型變量一樣可以用來定義結構體變量。定義變量以后,該變量就可以像定義的其他變量一樣使用了;成員又稱為成員變量,它是結構體所包含的若干個基本的結構類型,必須用“{}”括起來,并且要以分號結束,每個成員應表明具體的數據類型。

2、結構體的定義

下面我們以學生來舉例:假設一個學生包括姓名、年齡、性別、學號五個信息,為了能夠整體的描述一個學生,我們可以定義一個結構體類型。

struct Stu
{
    char name[20];//名字
    int age;      //年齡
    char sex[5];  //性別
    char id[15]; //學號
};

3、結構體的使用

#include<stdio.h>
int main()
{
	//定義結構體變量并對其進行初始化
	struct Stu s = { "張三",18,"nan","220210101" };
	//兩種結構體訪問操作符
	// . 操作符
	printf("%s\t%d\t%s\t%s\n", s.name, s.age, s.sex, s.id);
	// -> 操作符
	struct Stu* ps = &s;  //定義結構體指針變量 ps 并將 s 的地址賦給 ps
	printf("%s\t%d\t%s\t%s\n", ps->name, ps->age, ps->sex, ps->id);
	return 0;
}

注意:-> 操作符只能在已經有結構體指針的情況下才能使用。

到此這篇關于C語言超詳細講解指針與結構體的文章就介紹到這了,更多相關C語言指針與結構體內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++中的 % 的含義說明

    C++中的 % 的含義說明

    很多朋友私信小編不理解C++中的 % 的含義,其實有兩種意思,一種是格式化字符串輸出另一種是整數取余,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2023-03-03
  • 減少C++代碼編譯時間的簡單方法(必看篇)

    減少C++代碼編譯時間的簡單方法(必看篇)

    下面小編就為大家?guī)硪黄獪p少C++代碼編譯時間的簡單方法(必看篇)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言實現打印數字金字塔

    C語言實現打印數字金字塔

    這篇文章主要介紹了C語言實現打印數字金字塔方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言模擬實現memmove的示例代碼

    C語言模擬實現memmove的示例代碼

    memmove函數用于拷貝字節(jié),如果目標區(qū)域和源區(qū)域有重疊的話,memmove能夠保證源串在被覆蓋之前將重疊區(qū)域的字節(jié)拷貝到目標區(qū)域中,但復制后源內容會被更改。本文主要介紹了C語言模擬實現memmove的示例代碼,需要的可以參考一下
    2022-12-12
  • C++ const修飾變量和修飾函數介紹

    C++ const修飾變量和修飾函數介紹

    這篇文章主要介紹了C++ const修飾變量和修飾函數介紹,本文直接用實例來講解各自的作用,并總結了各自的使用技巧,需要的朋友可以參考下
    2015-03-03
  • C++與Java分別解決活動選擇問題和帶權活動選擇問題

    C++與Java分別解決活動選擇問題和帶權活動選擇問題

    這篇文章介紹了C++與Java分別解決活動選擇問題和帶權活動選擇問題,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Opencv實現視頻播放與進度控制

    Opencv實現視頻播放與進度控制

    這篇文章主要為大家詳細介紹了Opencv實現視頻播放與進度控制,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++中模板(Template)詳解及其作用介紹

    C++中模板(Template)詳解及其作用介紹

    這篇文章主要介紹了C++中模板(Template)的詳解及其作用介紹,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C++中const用于函數重載的示例代碼

    C++中const用于函數重載的示例代碼

    這篇文章主要介紹了C++中const用于函數重載的相關資料,需要的朋友可以參考下
    2017-09-09
  • C語言詳解select函數的使用

    C語言詳解select函數的使用

    C語言中select函數的使用?一般用connect、accept、recv或recvfrom這類函數,程序阻塞,直至該套接字上接受到數據后程序才能繼續(xù)運行。但是使用select函數可以實現非阻塞方式的程序
    2022-05-05

最新評論