国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組)

這篇具有很好參考價值的文章主要介紹了C語言:指針和數(shù)組(看完拿捏指針和數(shù)組)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法

目錄

數(shù)組名的理解:

一維數(shù)組:

?解析:

?字符數(shù)組:

?解析:?

?解析:

字符串數(shù)組:

?解析:?

?解析:?

一級指針:?

?解析:?

?解析:?

二維數(shù)組:

?解析:?

指針筆試題:

題一:一維數(shù)組

題二: 結(jié)構(gòu)體指針

題三: 一維數(shù)組

題四: 二維數(shù)組

題五: 二維數(shù)組

題六: 二維數(shù)組

題七:指針數(shù)組

題八: 指針數(shù)組(多級)

以上就是個人學習見解和學習的解析,歡迎各位大佬在評論區(qū)探討!

感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!


數(shù)組名的理解:

數(shù)組名是數(shù)組首元素的地址;
但是有2個例外
1. sizeof(數(shù)組名),這里的數(shù)組名表示整個數(shù)組,計算的是整個數(shù)組的大小,單位是字節(jié);
2. &數(shù)組名,這里的數(shù)組名表示整個數(shù)組,取出的是整個數(shù)組的地址。

代碼中的4/8指的是在32位或者X86環(huán)境下位4個字節(jié),在X64環(huán)境下是8個字節(jié)。?

一維數(shù)組:

#include <stdio.h>
int main()
{
	int a[] = { 1,2,3,4 };

	printf("%d\n", sizeof(a));//16
	printf("%d\n", sizeof(a + 0));//4/8
	printf("%d\n", sizeof(*a));//4
	printf("%d\n", sizeof(a + 1));//4/8
	printf("%d\n", sizeof(a[1]));//4
	printf("%d\n", sizeof(&a));//4/8
	printf("%d\n", sizeof(*&a));//16
	printf("%d\n", sizeof(&a + 1));//4/8
	printf("%d\n", sizeof(&a[0]));//4/8
	printf("%d\n", sizeof(&a[0] + 1));//4/8

	return 0;
}

?解析:

1、sizeof(數(shù)組名),數(shù)組名表示整個數(shù)組,計算的是整個數(shù)組的大小,單位是字節(jié)。

2、a不是單獨放在sizeof()內(nèi)部,也沒有取地址,所以a就是首元素的地址,a+0還是首元素的地址,是地址大小就是4/8個字節(jié)。

3、*a中的a是數(shù)組首元素的地址,*a就是對首元素的地址解引用,找到的就是首元素,首元素的大小就是4個字節(jié)。

4、這里的a是數(shù)組首元素的地址,a+1是第二個元素的地址,sizeof(a+1)就是地址的大小

5、計算的是第二個元素的大小。

6、&a取出的數(shù)組的地址,數(shù)組的地址也就是個地址。

7、&a---->?int( * )[ 4 ],? ?*&a----->int [ 4 ]。

8、&a取出的是數(shù)組的地址,&a--> int( * )[ 4 ],&a+1是從數(shù)組a的地址向后跳過一個(4個整型元素)數(shù)組的大小,&a+1還是地址,是地址就是4/8個字節(jié)。

9、&a[ 0 ]就是第一個元素的地址,計算的是地址的大小,是地址就是4/8個字節(jié)。

10、&a[ 0 ]+1就是第二個元素的地址,大小是4/8個字節(jié),&a[ 0 ]+1---> &a[ 1 ] 。

?字符數(shù)組:

#include <stdio.h>

int main()
{
    char arr[] = {'a','b','c','d','e','f'};

    printf("%d\n", sizeof(arr));//6
    printf("%d\n", sizeof(arr+0));//4/8
    printf("%d\n", sizeof(*arr));//1
    printf("%d\n", sizeof(arr[1]));//1
    printf("%d\n", sizeof(&arr));//4/8
    printf("%d\n", sizeof(&arr+1));//4/8
    printf("%d\n", sizeof(&arr[0]+1));//4/8

    return 0;
}

?解析:?

1、//數(shù)組名單獨放在sizeof內(nèi)部,這里的arr表示整個數(shù)組,計算的是整個數(shù)組的大小,單位是字節(jié),總共6個字節(jié)類型是char [6]。

2、//arr表示數(shù)組首元素的地址,arr+0還是數(shù)組首元素的地址,是地址就是4/8個字節(jié),類型是char*。

3、//arr表示數(shù)組首元素的地址,*arr就是首元素,大小1個字節(jié),類型是char。

4、//arr[1]就是第二個元素,大小是1個字節(jié)。

5、//&arr是數(shù)組的地址,但是數(shù)組的地址也是地址,是地址就是4/8。

6、//&arr + 1是跳過整個數(shù)組后的地址,是地址就是4/8個字節(jié)。

7、//第二個元素的地址,是4/8個字節(jié)。

#include <stdio.h>

int main()
{
    char arr[] = {'a','b','c','d','e','f'};

    printf("%d\n", strlen(arr));//隨機值
    printf("%d\n", strlen(arr+0));//隨機值
    printf("%d\n", strlen(*arr));//錯誤
    printf("%d\n", strlen(arr[1]));//錯誤
    printf("%d\n", strlen(&arr));//隨機值
    printf("%d\n", strlen(&arr+1));//隨機值
    printf("%d\n", strlen(&arr[0]+1));//隨機值

    return 0;
}

?解析:

1、因為字符數(shù)組arr中沒有‘ \0 ’,所以在求字符串長度的時候,會一直往后找,產(chǎn)生的結(jié)構(gòu)就是隨機值。

2、arr + 0是首元素的地址,和第一個一樣,也是隨機值。

3、//錯誤, arr是數(shù)組首元素的地址,*arr就是數(shù)組首元素,就是'a'-97;
//strlen函數(shù)參數(shù)的部分需要傳一個地址,當我們傳遞的是'a'時,'a'的ASCII碼值是97,那就是將97作為地址傳參。
//strlen就會從97這個地址開始統(tǒng)計字符串長度,這就非法訪問內(nèi)存了。

4、//錯誤

5、//&arr是數(shù)組的地址,數(shù)組的地址和數(shù)組首元素的地址,值是一樣的,那么傳遞給strlen函數(shù)后,依然是從數(shù)組的第一個元素的位置開始往后統(tǒng)計。

6、//隨機值

7、//&arr[0] + 1是第二個元素的地址。結(jié)果也是隨機值。

字符串數(shù)組:

#include <stdio.h>

int main()
{
    char arr[] = "abcdef";// a b c d e f \0

    printf("%d\n", sizeof(arr));//7
    printf("%d\n", sizeof(arr+0));//4
    printf("%d\n", sizeof(*arr));//1
    printf("%d\n", sizeof(arr[1]));//1
    printf("%d\n", sizeof(&arr));//4/8
    printf("%d\n", sizeof(&arr+1));//4/8
    printf("%d\n", sizeof(&arr[0]+1));//4/8

    return 0;
}

?解析:?

1、//7,類型是char [7]。

2、//arr + 0是首元素的地址。

3、//*arr其實就是首元素,1個字節(jié),理解為*arr--> *(arr+0) -- arr[0]。

4、//arr[1]是第二個元素,1個字節(jié)。

5、//&arr是數(shù)組的地址,是地址就是4/8個字節(jié)。

6、//&arr + 1是跳過一個數(shù)組的地址,4/8。

7、//&arr[0] + 1是第二個元素的地址 4/8。

#include <stdio.h>

int main()
{
    char arr[] = "abcdef";

    printf("%d\n", strlen(arr));//6
    printf("%d\n", strlen(arr+0));//6
    printf("%d\n", strlen(*arr));//錯誤
    printf("%d\n", strlen(arr[1]));//錯誤
    printf("%d\n", strlen(&arr));//6
    printf("%d\n", strlen(&arr+1));//隨機值
    printf("%d\n", strlen(&arr[0]+1));//5

    return 0;
}

?解析:?

由于與上面內(nèi)容相同,就不做過多解釋

1、//6

2、//6

3、//err

4、//err

5、//6

6、//隨機值

7、//5

一級指針:?

#include <stdio.h>

int main()
{
    char *p = "abcdef";

    printf("%d\n", sizeof(p));//4/8
    printf("%d\n", sizeof(p+1));//4/8
    printf("%d\n", sizeof(*p));//1
    printf("%d\n", sizeof(p[0]));//1
    printf("%d\n", sizeof(&p));//4/8
    printf("%d\n", sizeof(&p+1));//4/8
    printf("%d\n", sizeof(&p[0]+1));//4/8

    return 0;
}

?解析:?

1、//p是一個指針變量,大小就是4/8。

2、//p+1是'b'的地址,是地址大小就是4/8個字節(jié)。

3、//*p 就是'a'元素,就是1個字節(jié)。

4、//p[0]--> *(p+0) --> *p ?1個字節(jié)。

5、//4/8,類型是&p -- char**。

6、//4/8

7、//4/8 , &p[0] + 1得到是'b'的地址 。

#include <stido.h>

int main()
{
    char *p = "abcdef";

    printf("%d\n", strlen(p));//6
    printf("%d\n", strlen(p+1));//5
    printf("%d\n", strlen(*p));//錯誤
    printf("%d\n", strlen(p[0]));//錯誤
    printf("%d\n", strlen(&p));//隨機值
    printf("%d\n", strlen(&p+1));//隨機值
    printf("%d\n", strlen(&p[0]+1));//5

    return 0;
}

?解析:?

由于與上面內(nèi)容相同,就不做過多解釋

1、//6

2、//5

3、//err

4、//err

5、//隨機值

6、//隨機值

7、//5

二維數(shù)組:

#include <stdio.h>

int main()
{
    int a[3][4] = {0};

    printf("%d\n",sizeof(a));//48
    printf("%d\n",sizeof(a[0][0]));//4
    printf("%d\n",sizeof(a[0]));//16
    printf("%d\n",sizeof(a[0]+1));//4/8
    printf("%d\n",sizeof(*(a[0]+1)));//4
    printf("%d\n",sizeof(a+1));//4/8
    printf("%d\n",sizeof(*(a+1)));//16
    printf("%d\n",sizeof(&a[0]+1));//4/8
    printf("%d\n",sizeof(*(&a[0]+1)));//16
    printf("%d\n",sizeof(*a));//16
    printf("%d\n",sizeof(a[3]));//16

    return 0;
}

?解析:?

1、//3*4*4 = 48

2、//4

3、//a[0]是第一行這個一維數(shù)組的數(shù)組名,數(shù)組名算是單獨放在sizeof內(nèi)部了,計算的是整個數(shù)組的大小,大小是16個字節(jié)。

4、//a[0]作為第一行的數(shù)組名,沒有單獨放在sizeo內(nèi)部,沒有&,a[0]表示數(shù)組首元素的地址,也就是a[0][0]的地址,所以a[0]+1是第一行第二個元素的地址,是地址就是4/8個字節(jié)。

5、//4,計算的是就是第一行第2個元素的大小。

6、//4 / 8,a是數(shù)組首元素的地址,是第一行的地址 int(*)[4],a+1 就是第二行的地址。

7、//16,*(a+1) --> a[1] -> sizeof(*(a+1))->sizeof(a[1]) 計算的是第二行的大小,a+1 --> 是第二行的地址,int(*)[4],*(a+1) 訪問的第二行的數(shù)組。

8、//4/8,&a[0]是第一行的地址 int(*)[4],&a[0]+1 是第二行的地址 int(*)[4]。

9、//16 計算的是第二行的大小。

10、//計算的是第一行的大小-16,a是數(shù)組首元素的地址,就是第一行的地址,*a 就是第一行,*a --> *(a+0) --> a[0]。

11、//16,類型是a[3]--> int [4]。

指針筆試題:

題一:一維數(shù)組

#include <stdio.h>

int main()
{
     int a[5] = { 1, 2, 3, 4, 5 };

     int *ptr = (int *)(&a + 1);
     printf( "%d,%d", *(a + 1), *(ptr - 1));

     return 0;
}

注意:&a+1的類型為int( * )[ 5 ],強制轉(zhuǎn)換為int( * ).此時每次移動的就是4個字節(jié),而不是20個字節(jié)了!

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法

題二: 結(jié)構(gòu)體指針

#include <stdio.h>
//由于還沒學習結(jié)構(gòu)體,這里告知結(jié)構(gòu)體的大小是20個字節(jié)
struct Test
{
 int Num;
 char *pcName;
 short sDate;
 char cha[2];
 short sBa[4];
}*p;
//假設p 的值為0x100000。 如下表表達式的值分別為多少?
//已知,結(jié)構(gòu)體Test類型的變量大小是20個字節(jié)
int main()
{
     printf("%p\n", p + 0x1);
     printf("%p\n", (unsigned long)p + 0x1);
     printf("%p\n", (unsigned int*)p + 0x1);

     return 0;
}

注意:整型就是正常的加減運算指針類型就需要加減n*類型的大小。?

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法

題三: 一維數(shù)組

#include <stdio.h>

int main()
{
     int a[4] = { 1, 2, 3, 4 };

     int *ptr1 = (int *)(&a + 1);
     int *ptr2 = (int *)((int)a + 1);
     printf( "%x,%x", ptr1[-1], *ptr2);

     return 0;
}

注意: a強制轉(zhuǎn)換成int類型+1就是正常加減,最后轉(zhuǎn)換為指針int計算機會向后查找四個字節(jié)。

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法

題四: 二維數(shù)組

#include <stdio.h>

int main()
{
     int a[3][2] = { (0, 1), (2, 3), (4, 5) };

     int *p;
     p = a[0];
     printf( "%d", p[0]);

     return 0;
}

注意: 注意二維數(shù)組中沒有用{ }把數(shù)值包含,這里用的是( )是逗號表達式,取最后一個值為元素;a[ 0 ]可以看做&a[ 0 ][ 0 ].

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法

題五: 二維數(shù)組

#include <stdio.h>

int main()
{
     int a[5][5];

     int(*p)[4];
     p = a;
     printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);

     return 0;
}

注意地址相減為相差的元素個數(shù)?,此題為-4,因為求的是地址,所以需要將-4轉(zhuǎn)換成補碼輸出。

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法

題六: 二維數(shù)組

#include <stdio.h>

int main()
{
     int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

     int *ptr1 = (int *)(&aa + 1);
     int *ptr2 = (int *)(*(aa + 1));
     printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));

     return 0;
}

注意:*(aa+1) = a[1] = &a[1][0]。

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法

題七:指針數(shù)組

#include <stdio.h>

int main()
{
     char *a[] = {"work","at","alibaba"};

     char**pa = a;
     pa++;
     printf("%s\n", *pa);

     return 0;
}

注意:這里的a是指針數(shù)組,數(shù)組中每個位置的類型為char*。

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法

題八: 指針數(shù)組(多級)

#include <stdio.h>

int main()
{
     char *c[] = {"ENTER","NEW","POINT","FIRST"};

     char**cp[] = {c+3,c+2,c+1,c};
     char***cpp = cp;
     printf("%s\n", **++cpp);
     printf("%s\n", *--*++cpp+3);
     printf("%s\n", *cpp[-2]+3);
     printf("%s\n", cpp[-1][-1]+1);

     return 0;
}

注意:有了上面的基礎,這道題一步一步來,你們也可以解釋清楚!??!

C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法

以上就是個人學習見解和學習的解析,歡迎各位大佬在評論區(qū)探討!

感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!?感謝大佬們的一鍵三連!

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??C語言:指針和數(shù)組(看完拿捏指針和數(shù)組),C語言基礎整理,c語言,算法,開發(fā)語言,c++,筆記,深度學習,學習方法文章來源地址http://www.zghlxwxcb.cn/news/detail-675501.html

到了這里,關(guān)于C語言:指針和數(shù)組(看完拿捏指針和數(shù)組)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【C語言基礎教程】函數(shù)指針與指針大小

    【C語言基礎教程】函數(shù)指針與指針大小

    在C語言中,指針是一項強大的工具,用于處理內(nèi)存中的數(shù)據(jù)。除了常見的指向變量和數(shù)組的指針,C語言還支持函數(shù)指針,它是一個指向函數(shù)的指針。本文將深入探討函數(shù)指針的概念以及指針的大小在C語言中的重要性。 函數(shù)指針 是指向函數(shù)的指針變量。它允許我們在運行時

    2024年02月05日
    瀏覽(30)
  • C語言指針基礎

    C語言指針基礎

    目錄 前言 本期介紹內(nèi)容: 一、指針是什么? 二、指針和指針類型 指針類型的意義: 三、野指針 3.1什么是野指針? 3.2野指針的成因 1.指針未初始化 2.指針越界訪問 3.指針指向的那塊空間已經(jīng)釋放(還給操作系統(tǒng)了) 3.3如何規(guī)避野指針 四、指針運算 4.1指針加減整數(shù) 4.2指針

    2024年02月12日
    瀏覽(24)
  • C語言基礎之——指針(上)

    C語言基礎之——指針(上)

    前言:小伙伴們又見面啦!本期內(nèi)容,博主將展開講解有關(guān)C語言中指針的上半部分基礎知識,一起學習起來叭!?。?目錄 一.什么是指針 二.指針類型 1.指針的解引用 2.指針+-整數(shù) 三.野指針 1.野指針成因 (1)指針未初始化 ?(2)指針越界訪問 2.如何規(guī)避野指針 四.總結(jié) 指針

    2024年02月11日
    瀏覽(25)
  • C語言基礎之——指針(下)

    C語言基礎之——指針(下)

    前言:本篇文章將繼續(xù)講解有關(guān)指針的剩余基礎知識。 學無止境,一起加油叭!! 目錄 一.指針運算 1.指針 +- 整數(shù) ?2.指針的關(guān)系運算 ?3.指針 - 指針 二.指針與數(shù)組 三.二級指針 四.指針數(shù)組 總結(jié) 指針運算包括以下三種: 指針 +- 整數(shù) 指針 - 指針 指針的關(guān)系運算 我們嘗試用

    2024年02月11日
    瀏覽(26)
  • 【C語言基礎】:深入理解指針(三)

    【C語言基礎】:深入理解指針(三)

    指針系列回顧 : 【C語言基礎】:深入理解指針(一) 【C語言基礎】:深入理解指針(二) 一、冒泡排序 冒泡排序的核心思想就是:兩兩相鄰的元素進行比較。 可以看到,這段代碼對arr數(shù)組進行了排序,但這個代碼還有一些缺陷,那就是無論數(shù)組內(nèi)部的元素是否有序,他都會循

    2024年03月10日
    瀏覽(26)
  • C語言-基礎語法學習-3 二級指針

    C語言-基礎語法學習-3 二級指針

    當涉及到多級指針時,C語言的靈活性和強大的指針功能可以得到充分的發(fā)揮。二級指針是指指向指針的指針,也被稱為指向指針的引用。 使用二級指針可以實現(xiàn)以下功能: 動態(tài)內(nèi)存分配:通過二級指針可以動態(tài)地分配內(nèi)存塊,并將其地址傳遞給其他函數(shù)或模塊進行操作。這

    2024年02月12日
    瀏覽(25)
  • C語言 指針聲明和定義 - C語言零基礎入門教程

    目錄 [一.指針簡介] [1.內(nèi)存] [2.內(nèi)存地址] [3.指針聲明] [二.指針類型] [三.聲明并初始化一個指針] [1.聲明指針并直接初始化 – 推薦] [2.先聲明指針在初始化 – 不推薦] [四.查看指針地址和指針的值] [五.NULL 指針 – 空指針] [六.重點總結(jié)] [七.猜你喜歡] 零基礎 C/C++ 學習路線推薦

    2024年03月22日
    瀏覽(45)
  • 逍遙自在學C語言 | 指針的基礎用法

    逍遙自在學C語言 | 指針的基礎用法

    在C語言中,指針是一項重要的概念,它允許我們直接訪問和操作內(nèi)存地址。 可以說,指針是C語言一大優(yōu)勢。用得好,你寫程序如同趙子龍百萬軍中取上將首級;用得不好,則各種問題層出不窮,有種雙拳難敵四手的感覺。 本文將介紹指針的基礎知識,包括指針的定義、初始

    2024年02月09日
    瀏覽(32)
  • C語言基礎之——數(shù)組

    C語言基礎之——數(shù)組

    前言:本篇文章,我們將對一維數(shù)組,和二維數(shù)組進行展開式的講解,并進行實際應用。 目錄 一.一維數(shù)組 1.一維數(shù)組的創(chuàng)建和初始化 (1)數(shù)組的創(chuàng)建 (2)數(shù)組的初始化 ?2.一維數(shù)組的使用 3.一維數(shù)組在內(nèi)存中的存儲 二.二維數(shù)組 1.二維數(shù)組的創(chuàng)建與初始化 (1)數(shù)組的創(chuàng)建

    2024年02月11日
    瀏覽(24)
  • 初學Verilog語言基礎筆記整理(實例點燈代碼分析)持續(xù)更新~

    初學Verilog語言基礎筆記整理(實例點燈代碼分析)持續(xù)更新~

    實例:點燈學習 剛接觸 Verilog ,作為一個硬件小白,只能嘗試著去理解,文章未完…持續(xù)更新。 參考博客文章: Verilog語言入門學習(1) Verilog語法 【 Verilog 】一文帶你了解 Verilog 基礎語法 - 子墨祭的文章 - 知乎 關(guān)于Verilog中的幾種賦值語句 這里抄點,那里扣點,整理了一

    2024年02月07日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包