c語言柔性指針,c語言指針的指針

本文目錄一覽:

關於C語言中柔性數組內存釋放問題

首先,結構體里char * cpArr[0];的意思是分配0個為char *元素的數組,其實就是不分配,所以sizeof (struct testStruct)的值是4

然後,sizeof (struct testStruct) + 3 * sizeof (char *)表示的其實就是4個char*指針所佔用的內存空間,也就是4個struct testStruct結構體所佔用的內存空間。

這樣看來,指針t應該指向的是一個有4個struct testStruct元素的結構體,理論上應該不會導致內存泄漏。

這段代碼的大概目的就是打算讓struct testStruct結構體的cpArr數組可以有多個,且個數不確定的元素。雖然編譯器沒有給出警告,但這樣的代碼是一個很不好的代碼——不但降低了可讀性,也降低了可靠性。如果你想建立一個struct testStruct結構體的數組,如果直接使用struct testStruct * t = (struct testStruct *) malloc (2*(sizeof (struct testStruct) + 3 * sizeof (char *)));分配內存,那麼t[1]-cpArr[0]和t[0]-cpArr[1]將代表同一個值。

建議使用

struct testStruct * t = (struct testStruct *) malloc (sizeof (struct testStruct));

t-cpArr=(char**)malloc(3*sizeof(char*));

來分配內存,使用

free (t-cpArr);

free (t);

來釋放內存,char**的意思就是指向char*的指針,為了建立一個char*指針的數組,即字元串數組。而使用時還可以使用t-cpArr[0]、t-cpArr[1]、t-cpArr[2]來表示。即這個程序的代碼可以改成

#includestdio.h

#includestdlib.h

struct testStruct

{

char * c;

char ** cpArr;

};

int main (void)

{

struct testStruct * t = (struct testStruct *) malloc (sizeof (struct testStruct));

t-cpArr=(char**)malloc(3*sizeof(char*));

t-cpArr[0] = “This”;

t-cpArr[1] = “is a”;

t-cpArr[2] = “test.”;

printf (“%s %s %s\n”, t-cpArr[0], t-cpArr[1], t-cpArr[2]);

free (t-cpArr);

free (t);

return 0;

}

這樣雖然多佔了一個char**指針的空間,但會大大增強程序的可讀性和可靠性,就不會有問題了。

C語言指針的用法是什麼?

指針是C語言中廣泛使用的一種數據類型。運用指針編程是C語言最主要的風格之一。

利用指針變數可以表示各種數據結構;能很方便地使用數組和字元串;並能象彙編語言一樣處理內存地址,從而編出精練而高效的程序。指針極大地豐富了C語言的功能。

學習指針是學習C語言中最重要的一環,能否正確理解和使用指針是我們是否掌握C語言的一個標誌。

同時,指針也是C語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多編程,上機調試。只要作到這些,指針也是不難掌握的。

C語言實驗 關於指針的!!

#include stdio.h

#includestdlib.h

#includestring.h /*頭文件*/

int find(char srt[],char xCh); /*函數要聲明*/

void main() /*main()不是這樣寫吧*/

{

int cs; /*i時什麼東西*/

char a,k[100]; /*char a,k;字元串數組不是這樣聲明*/

/*int find(char srt,char xCh);這個放到上面聲明*/

/*clrscr();這個有什麼用?*/

printf(“input a char\n”);

scanf(“%c”,a); /*scanf(“%s”,a);錯*/

printf(“input a find\n”);

scanf(“%s”,k);

cs=find(k,a); /*cs=find(a,k);*/

printf(“%d\n”,cs);

}

int find(char srt[],char xCh) /*int findchar srt,char xCh要用()這個,不能用還有錯誤自己對照*/

{

int j,cs=0,len=strlen(srt);

char*p; /* int *p;*/

p=srt;

/*下面這部分自己看,和你自己的對照一下*/

for(j=0;jlen;j++)

{

if(*(p+j)==xCh)

{

cs++;

printf(“%d \n”,j);} }

/*這個幹嗎用?*/

return(cs);

}

/*改了我好長時間,給分啊~~~*/

關於C語言中的指針。。

#include”stdio.h”

#include”stdlib.h”

#include”string.h”

int main()

{

   char *src=”hello,world”;

   int len=strlen(src);

   int i;

   char *dest=(char*)malloc(len+1);

   if(dest==NULL)

   {

        printf(“dest is NULL!\n”);

        return 0;

   }

   //錯誤在這,你的dest指針變數,已經在循環中發生改變

   //由於要釋放動態分配的空間,最好不要修改這個空間的接收指針

   //src=src+len-1;

   //while(–len!=0)

    //*dest++=*src–;

   //*dest=0;

   for(i=0;ilen;i++)

     *(dest+i)=*(src+len-1-i);

   *(dest+i)=0;

   printf(“%s\n”,dest);

   free(dest);

   return 0;

}

結果:

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/186046.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 21:09
下一篇 2024-11-26 21:09

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • 指針Python:為什麼Python中不需要使用指針?

    在Python中,指針的使用不像其他語言一樣那麼常見。這是因為Python有自己的內存管理方式,所以在大多數情況下,不需要顯式地使用指針。那麼,為什麼Python中不需要使用指針呢…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論