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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组与指针的恩怨

發布時間:2023/11/29 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组与指针的恩怨 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、數組的本質

(1)、一種構造類型,(2)、相同類型的連續分配內存,(3)、數組的大小為sizeof(type)*array_size(模子type[ ]大小),(4)、數組名為數組的第一個元素的首地址 (5)、有時候可以當作指針常量

2、數組的地址VS數組名

數組的地址為&a,數組名為a,兩者的指針運算也不一樣,像&a+1,與a+1 是不同的

?

3、指針的本質

(1)、是一個變量(2)、是占用一定的內存空間(3)、用于保存內存地址的值(4)、可以通過*(鑰匙)取得內容 (5)參數傳遞,丟失長度信息(6)、const左數右指

4、數組VS指針

數組:聲明編譯器自動分配一片連續的內存空間,數組名為指針常量,

指針:聲明時表示只分配容納4個字節空間的地址,指針為變量

5、字符串:

字符數組、字符串(以\0結束的字符數組)、

char a[]="aaaaa";分布在棧空間

char *a="aaaaa";分布在只讀存儲區

strlen求取字符串長度

strcpy與 strncpy表示無限制與有限制,表示拷貝

strcat與strncat表示無限制與有限制,表示連接

#include <stdio.h>
//#include <syslib.h>
#include <string.h>
main()
{
char d[]="Golden Global";? // 可以運行?? 堆空間
//char *d ="Golden Global";?? // 不可以運行 只讀存儲區
char *s=" View WinIDE Library";
//clrscr();
strncpy(d,s,3);
printf("%s",d);
}

6、數組指針與指針數組

數組指針:本質是指針,類型為數組類型

typedef int(INT)[len];? //表示定義一個數組類型(也就是定義了一個模子)

INT a; //定義一個變量

INT * p;// 表示定義一個數組指針

等價于int (*p)[len]

#include<stdio.h>

int main()
{
?//數組指針
?int a[3]={1,2,3};
?int *p1=a;
?typedef int(AINT)[3];
?AINT *p2=&a;

?int b[2][2]={{1,2},{3,4}};
?typedef int(MATRIX)[2][2];
?MATRIX *p3=&b;

?int (*p4)[3]=&a;
?
?//指針數組
?char *c[10];
?c[0]="zhao";
?c[1]="chuang";
?printf("%s\n",c[0]);
?
?return? 0;
}

?

指針數組:本質是數組,內容是字符串

char * aa[len]={"aa","aa","cc"}

#include <stdio.h>
#include <string.h>

int lookup_keyword(const char* key, const char* table[], const int size)
{
??? int ret = -1;
???
??? int i = 0;
???
??? for(i=0; i<size; i++)
??? {
??????? if( strcmp(key, table[i]) == 0 )
??????? {
??????????? ret = i;
??????????? break;
??????? }
??? }
???
??? return ret;
}

#define DIM(a) (sizeof(a)/sizeof(*a))? //深刻理解*a代表32為的內存地址

int main()
{
??? const char* keyword[] = {
??????????? "do",
??????????? "for",
??????????? "if",
??????????? "register",
??????????? "return",
??????????? "switch",
??????????? "while",
??????????? "case",
??????????? "static"
??? };
??? printf("%d\t%d\n",sizeof(keyword),sizeof(*keyword));
//keyword數組存放32為地址4個字節,*keyword表示第一個元素的指針(地址)
???? printf("%s\n",*keyword);
??? printf("%d\n", lookup_keyword("return", keyword, DIM(keyword)));
??? printf("%d\n", lookup_keyword("main", keyword, DIM(keyword)));
}

7、main函數知道少

#include <stdio.h>
//argc 表示參數個數。argv表命令,env表示環境變量
int main(int argc, char* argv[], char* env[])
{
??? int i = 0;
???
??? printf("============== Begin argv ==============\n");
???
??? for(i=0; i<argc; i++)
??? {
??????? printf("%s\n", argv[i]);
??? }
???
??? printf("============== End argv ==============\n");
???
??? printf("\n");
??? printf("\n");
??? printf("\n");
???
??? printf("============== Begin env ==============\n");
???
??? for(i=0; env[i]!=NULL; i++)
??? {
??????? printf("%s\n", env[i]);
??? }
???
??? printf("============== End env ==============\n");
}

?

?

?

?

總結

以上是生活随笔為你收集整理的数组与指针的恩怨的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。