1. 程式人生 > >指標與字串知識整理 c語言

指標與字串知識整理 c語言

一、指標

1. 輸出地址

printf("%p",&i);   //地址
printf("%x",&i);   //十六進位制整數

32bit下兩者相同,但是64bit就不同

2. int* p,q;     //int *p, int q;  沒有int*這種型別,而是*p是int

    *p++;          //++優先順序高於*,但p++為字尾,即取p++以前的值,p指標後移,所以是i=*p,p+1  

3. 陣列

int a[10];  相當於 int *const a;  所以不可以有  int b[]; b=a;

a,&a,&a[0]都是相等的,表示陣列a的起始地址

*a=a[0]表示a[0]的值

4.  i,&i,p,*p

int i;
scanf("%d",&i);       //i=%d
scanf("%d",i);         //&i=%d;
void f(int *p)          //若 f(&i)
{
    printf("%d",*p);          //i
    printf("%p",p);           //&i
    printf("%p",&p);         //&p即指標p的地址,即存放i的地址的變數的地址
}

5.關於const 和指標

  • int *const p=&i;

指標p不可修改,不可再指向別的地址,不可有p++;

  • const int*p=&i;或int const *p=&i

即(*p)為const,不可通過p修改i

可以i++;可以p=&j;不能 *p=j;

二、字串

1.一個字串 :

char str[]={'h','i','\0'}

char str[]="hi"

char *str="hi"

計算字串長度時不包括最後的0,但0要佔空間,比如:

#include <string.h>
strlen(str);                           //2
sizeof(a)/sizeof(a[0]);    //3

2.字串陣列:

  • char str[][5]={"haha","hi",}     //hello的佔用6個,會報錯

ps:在c語言中,若有 char str[][10]={"hello""hi"}<==>{"hellohi"}

  • 雙指標和二維陣列的區別
char **a;   //a是一個指向一個指標,該指標指向一個字元(串)
char a[][10]   //a[i]-->char [10]
char *a[]      //a[i]為一個指標,指向某處字串

4.字串輸入輸出

單字元輸入輸出
int putchar(int c)       //返回寫出了幾個字元,正常為1,有誤EOF=-1
int getchar()             //返回E0F=-1表示輸入結束  CTRL-Z(win)  CTRL-D(unix)

3.字串操作

char *s="hello";

char *s2="hello";

s1和s2都只指向hello字串,儲存同一地址,而hello存放的位置為只讀所以不可以有 s[0]='H'進行修改

如果要修改,則需要 char s[]="hello"即可修改

當傳遞引數 或需要動態分配陣列空間時,使用指標

即字串陣列傳入函式中時,函式無法對其修改

避免字元陣列越界,如

char s1[7];  
char s2[7];
scanf("%6s",&s);    //一個字串最多6個字元不包括\0

輸入:1234567     //則s1:123456,     s2:7  此時不管空格和回車

不可以 char *str;  scanf("%s",str);    當str本身指向的地址為有害的時候,有可能會出錯

4.字串函式

<string.h>

size_t strlen(const char*s);          //不包括‘\0’

int strcmp(const char*str1, char *str2)     //0:str1==str2,    -1:str1<str2

      str1[]="abc";str2[]="Abc";

      strcmp(str1,str2);    //32: 'a'-'A'

int strncmp(const char*str1, char *str2,size_t n)    //前n個字元比較

char *strcpy(char *restrict dst, char *restrict src)    //src-->dst

char *strcat(char *restrict s1, char *restrict s2)     //s1s2, s1需要有足夠的空間

char *strchr(char *str, int c)                                   //返回NULL表示沒找到

charstr[]="hello";

       char *c;

       c=strchr(str,'o');

       printf("%c",*c);    //'o'

char *strrchr(char *str, int c)    //從右邊開始找

安全版本:

char *strncpy(char *restrict dst, char *restrict src,size_t n)

char *strncat(char *restrict s1, char *restrict s2,size_t n

相關推薦

指標字串知識整理 c語言

一、指標1. 輸出地址printf("%p",&i); //地址 printf("%x",&i); //十六進位制整數32bit下兩者相同,但是64bit就不同2. int* p,q;     //int *p, int q;  沒有int*這種型別,

嵌入式C語言--指標字串

使用指標這一工具來操作字串。 定義字串變數的初始化方法 char *strptr = "liefyuan"; char strarray1[] = "liefyuan"; char strarray2[8] = "liefyuan"; char strarray3[8] = {'

C++語言程式設計基礎》學習之陣列指標字串

陣列元素在記憶體中順次存放,它們的地址是連續的。元素間實體地址上的相鄰,對應著邏輯次序上的相鄰。 陣列名字是陣列首元素的記憶體地址,陣列名是常量,不能被賦值 陣列名是陣列的指標,指向首個元素的地址,多維陣列的n-1維是指標一維陣列初始化: 在定義陣列時給出陣列元素的初始值:列

嘔心瀝血整理C語言指標大全,都在這裡了!

前言 相信大多數的同學都是第一門能接觸到語言是C/C++,其中的指標也是比較讓人頭疼的部分了,因為光是指標都能專門出一本叫《C和指標》的書籍,足見指標的強大。但如果不慎誤用指標,這些指標很大可能就會像惡魔一樣把你的程式給直接搞崩潰。 3個月前,我編寫了一份這些指標都是惡魔嗎?.c的檔

C++指標字串

C語言裡沒有字串資料型別,要想獲得字串的表示形式利用字元陣列 #include<iostream> using namespace std; #include<stdlib.h&g

C++初學初練數學指標字串之矩陣初練

#include <iostream> #include <string> #include <cmath> using namespace std; class Matrix { public: Matrix(int,int); ~

數據結構算法 基於c語言

相互 線性 內存 例子 c語言 基於 數據結構 align 四種 學習數據結構與算法走向深藍之路 第一章:數據結構與算法概念型 數據結構:數據之間的相互關系,即是數據的組織形式. 基本組成:{ 數據:信息的載體 數據元素:數據基本單位: } 其結構形式有四種: 1,集合結構

《數據結構算法分析—C語言描述》pdf

動態 https con 設計 ear 詳細介紹 nbsp -i b- 下載地址:網盤下載 內容簡介 編輯 《數據結構與算法分析:C語言描述(原書第2版)》內容簡介:書中詳細介紹了當前流行的論題和新的變化,討論了算法設計技巧,並在研究算

算法 - 棧隊列(C 語言實現)

元素 語言 訪問規則 並且 下標 出棧 數據結構 規則 算法 目標: 理解 棧 與 隊列 這兩種數據結構, 並且知道如何應用。 算法 + 數據結構 = 程序 一、堆棧 堆棧是一組元素的集合,類似於數組,但數組可以按下標訪問,堆棧的訪問規則只能為push 與

【數據結構算法分析——C語言描述】練習1.1——選擇問題

problem 內容 語言 log %d include oid define signed 本部分內容來自http://www.cnblogs.com/mingc,筆者在此只用於整理學習。 問題描述:編寫一個程序解決選擇問題。令k=N/2。畫出表格顯示你的程序對於N為

《數據結構算法分析-C語言實現》 馬蹄棋盤

efault def flag mes pan 設計 The chess 嘗試 問題描述 國際象棋的棋盤為8×8的方格棋盤。現將“馬”放在任意指定的方格中,按照“馬”走棋的規則將“馬”進行

數據結構算法分析 c語言描述 pdf 高清下載

analysis 其他 算法設計 研究 and 處理方法 機械 算法分析 arch 網盤下載:數據結構與算法分析 c語言描述 pdf 高清下載 – 易分享電子書PDF資源網 作者: [美] Mark Allen Weiss 出版社: 機械工業出版社 副標題: C語言描述

字串處理(c語言

[提交] [統計] [提問] 題目描述 讀入兩個字串,字串除了數字還可能包括 ‘—’、‘E’、‘e’、’.’,相加之後輸出結果,如果是浮點型,要求用科學計數法表示(最多包含10個有效數字)。 輸入描述 輸入包含多組測試資料。 每組輸入佔兩行,每行一個字串,測試資料保證字串

字串連線 (c語言

題目描述 將給定的字串連線起來。書中的演算法描述如下: 圖:字串連線演算法 輸入描述 三對字串,每對字串佔一行,用空格隔開。每個字串只包含數字和英文字母大小寫且長度不超過100。 輸出描述 將後一個字串連線到前一個字串後面,如果結果字串長度超過100,輸出一行“Res

02-線性結構2 一元多項式的乘法加法運算(C語言 + 註釋)

設計函式分別求兩個一元多項式的乘積與和。 輸入格式: 輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。 輸出格式: 輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項

Bitmap 優化相關知識整理

Bitmap圖片佔用記憶體計算: Bitmap圖片在載入到記憶體的時候是按照:寬*高*畫素點位數來計算的。你可以把圖片看成是由width行、height列的矩陣組成,每一個矩陣元素代表一個畫素點,每一個畫素點都是1byte整數倍的資料,這個資料越大,表示的色彩就越豐富,圖片的顯示質量就越高。Bi

指標9(指標字串

例題 應用字元指標,將字串“How are you!”從a陣列複製到b陣列。 #include<stdio.h> int main() {char a[]="How are you!",b[20]; char *s1,*s2; s1=a; s2=b; while(*s

指標字串指標函式

標題1、 指標與字串的千絲萬縷 由於在C語言中,是通過字元陣列來儲存字串的,因而前面通過指標對一維陣列和二維陣列的操作方法,同樣適用於字串。其實,對字串的操作最好採用字串操作函式。 #include<stdio.h> int main() { char name[12]

一級指標、二級指標字串

c語言中沒有字串型別,通過字元陣列來模擬字串,字串以‘\0’結束。 一、一級指標: 字元陣列的定義: 1.指定長度:char buf[100]={‘a’,‘b’}; 或char buf[100]=“ab”; 如果初始化的字元個數大於陣列長度,將會出現編譯錯

Linux-C基礎知識學習:C語言作業-輸入m、n,並把m~n之間的不能被3整除的數輸出

Linux基礎知識學習 C語言作業:輸入m、n,並把m~n之間的不能被3整除的數輸出 //輸入m、n,並把m~n之間的不能被3整除的數輸出 #include <stdio.h> ma