地址/指標和字串

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   使用   sp   

原文:地址/指標和字串

今天做作業時,發現下列一個問題。

首頁是這個自編的strncpy函數:

#include "ctype.h"#include "stdlib.h"#include "string.h"#include "windows.h"int main(){char *strata(char s1[],char s2[],int n);char nam1[41]="das";char nam2[41]="wo shi yi ge da sha bi";strata(nam1,nam2,4);puts(nam1);system("pause");return 0;}char *strata(char s1[],char s2[],int n){int i;char *prt=s1;if(n>strlen(s2))return "-1";else{s2[n]=‘\0‘;for(i=0;i<n;i++)s1[i]=s2[i];}}

 之前一下子忘記:實參中傳入的是數組的地址。

慢慢發現char *prt=s1;

數組名本身就是指標常量;

字串可以賦值給地址的問題:

對於語句  char *a="hello";

對於這個聲明方式,會造成的誤解是:聲明了一個字元指標(它會指向一個位置),將“字串”賦值給 指標運算式"*a"所指向的地址。但正解是:聲明了一個字元指標後,並用字串常量的第一個字元的地址賦值給指標變數a。即正確順序是:1.分配記憶體給字元指標;2.分配記憶體給字串;3.將字串首地址賦值給字元指標;         這裡有兩點需要考慮清楚的地方:①*a只是指向一個字元。舉例如下:

[c++] view plaincopyprint?
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. int main(void){  
  5.     char *a="bcd";  
  6.     printf("輸出字元:%c /n", *a);  /*輸出字元,使用"%c"*/<br>    printf("輸出字元:%c /n", *(a+1) );  /*輸出字元,使用"%c"*/  
  7.     printf("輸出字串:%s /n", a); /*輸出字串,使用"%s";而且a之前不能有星號"*"  */   
  8.     system("pause");  /*為了能看到輸出結果*/  
  9. }  
  10. /*運行結果如下: 
  11. 輸出字元:b<br>輸出字元:c 
  12. 輸出字串:bcd*/  

       ② 若字串常量出現在在運算式中,代表的值為該字串常量的第一個字元的地址。所以”hello”僅僅代表的是其地址。           

      

 
  1. char *a;  
  2. a="hello";/*這裡字串"hello"僅僅代表其第一個字元的地址*/  

   C中沒有字串變數,所以在存放字串常量時一般採用字元數組來儲存。 
     數組是一個連續的儲存空間,這裡記錄著兩個重要的量:首地址和空間大小。
    而指標不關心其長度,只要記錄下首地址就OK。

    char *a;//申請空間地址
    a=“hello”;//a指向‘h’,並且記憶體開闢。
     為方便理解,一些地方可以把地址/指標和字串“等價”,地址/指標所指向的變數是字串的首個字元。

     如有更好的理解,希望大家來點評







 

 

地址/指標和字串

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.