日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言入门经典——基础知识(指针 数组 多维数组)

發(fā)布時(shí)間:2025/10/17 编程问答 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言入门经典——基础知识(指针 数组 多维数组) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于指針與數(shù)組的總結(jié)如下



語(yǔ)句的解釋與說(shuō)明

int number = 5;?==》》這條語(yǔ)句會(huì)分配一塊內(nèi)存來(lái)存儲(chǔ)一個(gè)整數(shù),使用number名稱(chēng)可以訪問(wèn)這個(gè)整數(shù)。

Int *pnumber = &number;==》》pnumber的初值是number變量的地址。

一維數(shù)組x[n1]==》》[n1]放在數(shù)組名稱(chēng)之后,告訴編譯器它是一個(gè)有n1個(gè)元素的數(shù)組。

二維數(shù)組y[n1][n2]==》》編譯器會(huì)創(chuàng)建一個(gè)大小為n1的數(shù)組,它的每個(gè)元素是一個(gè)大小為n2的數(shù)組。


通過(guò)指針

訪問(wèn)值(變量、一維數(shù)組、二維數(shù)組)

int number = 99;

int ? *pnumber = ?&number;

%p-->(void*)&pnumber?== 》》pnumber的地址(pnumber所占的內(nèi)存位置的第一個(gè)字符)

????????????? ??轉(zhuǎn)換為 void* ,可以禁止編譯器發(fā)出警告。

%p-->pnumber==》》存儲(chǔ)在pnumber的值(它是number的地址)

%d-->*pnumber==》》pnumber所含的地址中存儲(chǔ)的值(它是存儲(chǔ)在number中的值)

? ? ? ? ? ? ? ???*運(yùn)算符的作用是訪問(wèn)存儲(chǔ)在pnumber中的地址的數(shù)據(jù)。

char multiple [] = "a string";

char *p = multiple;

%p-->(p+i)==》》數(shù)組中每個(gè)元素的地址。

%c-->*(p+i)==》》數(shù)組中每個(gè)元素的值。

? ? ? ? ? ? ??? 其是給p中的地址加上整數(shù)i,再對(duì)得到的地址取消引用,結(jié)果等同multiple[i]

char board[3][3] = {

????????? ? {'1','2','3'},

????????? ? {'4','5','6'},

????????? ? {'7','8','9'}

};

char *pboard = *board;

%p-->board==》》是char型二維數(shù)組的地址 ? ? char**類(lèi)型

????????????????? ?*(*board + i) ?或者 *(*pboard+i) ?可以得到二維數(shù)組中的所有值

? ? ? ? ? ? ? ?*board取消了對(duì)board的引用。因?yàn)閎oard是指針的指針,是數(shù)組中第一個(gè)元素board[0]的地址,

%p-->board[0]?==》》是char型一維子數(shù)組的地址

%p-->&board[0][0]?==》》是char型數(shù)組元素的地址

%c-->**board 或者 *board[0] 或者 board[0][0]==》》獲取第一個(gè)元素的值

? ? ? ? ? ? ? ? ?




****************************************指針***************************************

******************************能夠存儲(chǔ)地址的變量稱(chēng)為指針*****************************

指針的聲明:

? ? int *pointer = NULL; ? 或者 ?int *pointer = 0;

? ? 測(cè)試指針是否為空:if(!pointer) ?或者 ?if(pointer != NULL)

? ? 聲明一個(gè)指向int類(lèi)型變量的指針,pointer變量的類(lèi)型是 Int *,它可以存儲(chǔ)任意Int類(lèi)型變量的地址。

? ? NULL是標(biāo)準(zhǔn)庫(kù)中定義的一個(gè)常量,對(duì)于指針?biāo)硎?。NULL是一個(gè)不指向任何內(nèi)存位置的值。這表示,使用不指向任何對(duì)象的指針,不會(huì)意外覆蓋內(nèi)存。

? ? 我們知道變量pointer是一個(gè)指針是不夠的,更重要的是,編譯器必須知道它所值的變量的類(lèi)型。沒(méi)有這個(gè)信息,根本不可能知道它占用多少內(nèi)存,或者如何處理它所指的內(nèi)存的內(nèi)容。

?用已聲明的變量地址初始化pointer變量,可以使用尋址運(yùn)算符&,例如:

??? int? number = 10;

? ? int *pointer =? &number;

? ? 第一條語(yǔ)句會(huì)分配一塊內(nèi)存來(lái)存儲(chǔ)一個(gè)整數(shù),使用number名稱(chēng)可以訪問(wèn)這個(gè)整數(shù)。

? ??pointer的初值是number變量的地址。兩句的順序不能顛倒,編譯器要先分配空間,才能使用number的地址初始化pointer變量。


? ? number 和 pointer 的地址是變量在這臺(tái)計(jì)算機(jī)上存放的地方。

? ? number變量是一個(gè)整數(shù)(10),但是pnumber變量是number的地址。

? ? 使用*pnumber可以訪問(wèn)number的值,即間接地使用number變量的值。

??指針的使用:(說(shuō)明:使用一個(gè)指針變量可以改變其它許多變量的值,但是變量的類(lèi)型要相同)

#include<stdio.h> int main() {long num1 = 0L;long num2 = 0L;long *pnum = NULL;pnum = &num1; //get address of num1*pnum = 2; //set num1 to 2++num2; //increment num2printf("num1=%ld num2=%ld\n",num1,num2);// 2 1num2 += *pnum; //add num1 to num2printf("num1=%ld num2=%ld\n",num1,num2);//2 3//指針重新指向了 num2pnum = &num2; //get addres of num2l++*pnum;//increment number2 indirectly //(++*pnum遞增了pnum指向的值 == (*pnum)++ ) //如果省略括號(hào),就會(huì)遞增pnum所含的地址,printf("num1=%ld num2=%ld\n",num1,num2);//2 4printf("\nnum1=%ld num2=%ld *pnum=%ld *pnum+num2=%ld\n",num1,num2,*pnum,*pnum+num2);//2 4 4 8return 0; }

指針與常量:

? ? 指向常量的指針:

????? ? 可以改變指針中存儲(chǔ)的地址,但是不允許使用指針改變它指向的值。

long value = 999L;const long *pvalue = &value;//把pvalue指向的值聲明為const //可以通過(guò)value改變 pvalue指向的值,但是不能通過(guò)pvalue指針做這個(gè)改變*pvalue = 888L;//error: assignment of read-only location ‘*pvalue’value = 777L;//pvalue指向的值不能改變,但是可以對(duì)value進(jìn)行任意操作 //指針本身不是常量,所以仍可以改變它指向的值。long number = 666L;pvalue = &number;

? ? 常量指針:

????? ? 指針中存儲(chǔ)的地址不能改變,但是可以使用指針改變它指向的值。

int count = 43;int *const pcount = &count;printf("==%d\n",*pcount); //43int item = 34; // pcount = &item;//error: assignment of read-only variable ‘pcount’*pcount = 345;//通過(guò)指針引用了存儲(chǔ)在const中的值,將其改為345printf("==%d\n",*pcount);//345

?指向常量的常指針:

????? ? 指針中存儲(chǔ)的地址不能改變,指針指向的值也不能被改變。

int itemm = 25;const int *const pitem = &item;

****************************************數(shù)組***************************************

**********************************相同類(lèi)型的對(duì)象集合*********************************

? ?//數(shù)組與指針的區(qū)別是:可以改變指針包含的地址,但是不能改變數(shù)組名稱(chēng)引用的地址

//數(shù)組名稱(chēng)本身引用了一個(gè)地址char multiple[] = "My string";char *p = &multiple[0];printf("The address of the first arry element:%p\n",p);//The address of the first arry element:0x7ffddba45350 p = multiple;printf("The address obtained from the array name:%p\n",p);//The address obtained from the array?name:0x7ffddba45350

//多維數(shù)組


int main() {char board[3][3] = {{'1','2','3'},{'4','5','6'},{'7','8','9'}};printf("value of board[0][0] : %c\n",board[0][0]);printf("address of board[0][0] : %p\n",&board[0][0]);printf("value of *board[0]: %c\n",*board[0]);printf("address of board[0]: %p\n",board[0]);printf("value of **board : %c\n",**board);printf("address of board : %p\n",board);for(i=0;i<9;i++){printf("board:%c\n",*(*board+i));}return 0; } value of board[0][0] : 1
address of board[0][0] : 0x7ffee67e6f50
value of *board[0]: 1
address of board[0]: 0x7ffee67e6f50
value of **board : 1

address of board : 0x7ffee67e6f50

board:1? ? ? ? ? ? ? ? ?board:2? ? ? ? ? ? ? ? ? ?board:3? ? ? ? ? ? ? ? board:4? ? ? ? ? ? ? board:5
board:6? ? ? ? ? ? ? ? ?board:7? ? ? ? ? ? ? ? ? ?board:8? ? ? ? ? ? ? ??board:9




《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的C语言入门经典——基础知识(指针 数组 多维数组)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。