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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

高级C语言教程-指针和存储

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高级C语言教程-指针和存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

講一講C語言中的值傳遞引用還有地址傳遞;
以下面的一段代碼為例:

void GetMemory(char *p) {p = (char *) malloc(100); } void Test(void) {char *str = NULL;GetMemory(str);strcpy(str,"hello world");printf(str); }

說明在函數內部修改形參并不能真正的改變形參的值,在執行一下代碼
char *str = NULL;
GetMemore(str);
之后的str 仍然為NULL,這是應為C語言的函數傳參是傳值的,因此程序員并不能試圖修改p的值而只能修改*P的值也就是說只能修改p指針指向的值,在C語言的函數中進行的是值的傳遞,當使用指針的時候也只是將指針的進復制,因此作為形參的指針并不能被修改而只能修改指針所指向的值,也就是說函數只是將指針進行了值傳遞,將指針進行了copy,因此在函數內部使用兩個指針進行的值的更改是無效的;


一般有兩種傳遞方式:
1)值傳遞—-包括(數值傳遞,指針傳遞)
2)引用傳遞
你問題中的指針傳遞,其實就是值傳遞:
void GetMemory( char p )
{
 p = ‘a’;
}
void Test( void )
{
 char str;
 GetMemory( str );
 pinrtf(“%c”,str);
}


引入你的這個問題,你雖然將Test中的指針地址傳過去了,char *p確實也接受到了,但是:
p = (char*) malloc( 100 );這條語句中,malloc會返回一個新的地址,同時賦值給p,p已經不是原來的地址了。

void GetMemory( char*p )
{
 p = (char*) malloc( 100 );
}
void Test( void )
{
 char*str = NULL;
 GetMemory( str );
 strcpy( str, “hello world” );
 printf( str );
}
此時,p是指向一塊大小為100的空間。但是str還是指向NULL
值傳遞的話,形參在函數內只能作為右值,而不能作為左值
值傳遞就相當于是拷貝,也就是賦值:
如:
int a = 10;
int b;
b = a;


在系統復位時,所有的全局變量都被初始化為零,因此malloc函數會判斷本次調用是否是復位的第一次調用,如果是第一次調用那么程序就需要對寫全局數據進行初始化。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的高级C语言教程-指针和存储的全部內容,希望文章能夠幫你解決所遇到的問題。

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